awkで右揃えの列を印刷する方法は?

awkで右揃えの列を印刷する方法は?

次の入力データがあります。

V 0.886 3.768 -2.882
C -0.082 3.768 -3.850
M -0.900 3.769 4.669
F -0.001 3.768 -3.769

出力形式は次のようになると予想されます。

V    0.886  3.768    -2.882
C   -0.082  3.768    -3.850
M   -0.900  3.769     4.669
F   -0.001  3.768    -3.769

私は次のコマンドを使用します。awk -v '{print $1, "\t", $2, "\t", $3, "\t", $4}'ただし、キューの行ではなく行を印刷します。

V  0.886  3.768  -2.882
C  -0.082 3.768  -3.850
M  -0.900 3.769  4.669
F  -0.001 3.768  -3.769

このcolumn -tコマンドは目的の結果も表示しません。次のように表示されます。

V    0.886  3.768     -2.882
C    -0.082  3.768    -3.850
M    -0.900  3.769    4.669
F    -0.001  3.768    -3.769

この問題を解決する方法を教えてください。

ベストアンサー1

データをタブ区切りの列として印刷したいようです。各数値列は、3桁の小数点(デフォルトでは右揃え)を含む6文字幅の浮動小数点形式printfで指定する必要があります。%6.3f

$ awk '{ printf "%s\t%6.3f\t%6.3f\t%6.3f\n", $1, $2, $3, $4 }' file
V        0.886   3.768  -2.882
C       -0.082   3.768  -3.850
M       -0.900   3.769   4.669
F       -0.001   3.768  -3.769

これは、4つのフィールドの各セットを印刷するためにprintfフォーマット文字列と共に使用されます。%s\t%6.3f\t%6.3f\t%6.3f\n最初のフィールドは文字列(%s)で印刷され、他のフィールドは上記の形式で指定されます。各フィールドの間にはタブ文字()が出力され、\t最後には改行文字()が出力されます。\n

これにより、フィールドにスペース文字が埋め込まれたタブ区切りデータが生成されます。下では、タブは^I出力に次のように表示されますcat -t

$ awk '{ printf "%s\t%6.3f\t%6.3f\t%6.3f\n", $1, $2, $3, $4 }' file | cat -t
V^I 0.886^I 3.768^I-2.882
C^I-0.082^I 3.768^I-3.850
M^I-0.900^I 3.769^I 4.669
F^I-0.001^I 3.768^I-3.769

おすすめ記事