列-tに対応するPOSIX

列-tに対応するPOSIX

私は最近POSIXがあるという事実に驚きました。 リスト ユーティリティは含まれていません。 column 便利です。 column4.3BSDで初登場し、とても便利です。 POSIXと同等のものはありますか?


私が変更したい正確なコマンドは次のとおりです。

$もっと見る - ./tmp.txt
1小さな000a
2非常に_非常に_非常に_非常に_長い000b
小型000c 3個
$column-t --./tmp.txt
1小さな000a
2非常に_非常に_非常に_非常に_長い000b
小型000c 3個
$

つまり、タブを展開してよりきれいな列を作成できます。

ベストアンサー1

POSIXは既存の動作をエンコードすることを好み、既存の動作が満足できない場合に広く採用されていない新機能のみを適用します。最近では、データを表示するために固定幅フォントの書式なしテキストを使用する必要がないため、要件にcolumnなる可能性はほとんどありません。 BSDから派生したBSDとは異なり、prSystem Vやその他の歴史的なユニスには存在しないため、継承はありません。

他のテキストユーティリティと同様に、適切なワークロードを使用してawkとして表現できます。これは最小限にテストされましたcolumn -t。単純な場合(ただ1文字)、awkのオプションは-Fsに似ています。column-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];
    }
}

おすすめ記事