Posix

POSIX 等效於列 -t

  • August 2, 2020

我最近驚訝地發現,POSIX 實用程序列表 不包括該 column 實用程序。 column最早出現在 4.3BSD 中,它非常有用。是否有相當於它的POSIX?


我要替換的確切命令是:

$ 更多 -- ./tmp.txt
1 小 000a
2 非常_非常_非常_非常_長 000b
3 小 000c
$ 列 -t -- ./tmp.txt
1 小 000a
2 非常_非常_非常_非常_長 000b
3 小 000c
$

也就是說,展開選項卡以創建更漂亮的列。

POSIX 更喜歡對現有行為進行編碼,並且僅在現有行為不令人滿意時強制要求新功能或未被廣泛採用的功能。現在沒有太多要求使用固定寬度字型的無格式文本來表示數據,因此column不太可能成為強制性的。與 不同pr的是,它來自 BSD,它不存在於 System V 和其他歷史版本中,因此它沒有被繼承。

與任何其他文本實用程序一樣,您可以通過適度的工作在 awk 中表達它。這是一個經過最低限度測試的column -t. awk 的-v選項在簡單情況下與column‘s類似-s(使用單個字元)。

#!/usr/bin/env awk
{
   if (max_column < NF) max_column = NF;
   for (i = 1; i <= NF; i++) {
       if (width[i] < length($i)) width[i] = length($i);
       data[NR, i] = $i;
   }
}
END {
   for (i = 1; i < max_column; i++) format[i] = sprintf("%%-%ds  ", width[i]);
   format[max_column] = "%s\n";
   for (k = 1; k <= NR; k++) {
       for (i = 1; i <= max_column; i++) printf format[i], data[k, i];
   }
}

引用自:https://unix.stackexchange.com/questions/602522