ファイルからデータを抽出し、大きな固定幅テーブルで構成したいと思います。テーブルには複数の列があると予想されます。 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