次の入力データがあります。
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