固定幅の列を持つテーブルを生成するために awk で配列を呼び出す

固定幅の列を持つテーブルを生成するために awk で配列を呼び出す

ファイルからデータを抽出し、大きな固定幅テーブルで構成したいと思います。テーブルには複数の列があると予想されます。 30列があるとしましょう。このテーブルを作成するために既存のコマンドラインを使用した場合は、次のような非常にawk長いコマンドラインを作成する必要があります。awk

awk '{printf "%-5s  %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30}'

この線形を短くする方法はありますか?たとえば、上記の長いコマンドで配列を実装したいとします。配列は、awk次のように各列を個別に定義するのではなく、作成する列の数と幅を示します。

awk 'BEGIN {for i in {1..30}; do echo %-5s\n print i}

awk複数の固定幅列を生成するためにこの方法を内部的に正しく実装するにはどうすればよいですか?

ベストアンサー1

一度に1フィールドずつループ内で印刷自体を実行できます。

awk '{for(i=1;i<=NF;i++) { printf "%-5s",$i } ; printf("\n"); }'

複数行が1つにマージされるのを防ぐには、ループの後に改行文字を印刷する必要があります。

例えば

echo a b c 32 87 x5 | awk '{for(i=1;i<=NF;i++) { printf "%-5s",$i } ; printf("\n"); }'
a    b    c    32   87   x5  

おすすめ記事