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

看来您想要将数据打印为制表符分隔的列,并且每个数字列应具有格式printf%6.3f即 6 个字符宽的浮点数,具有 3 个小数位(默认情况下右对齐)。

$ 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

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

相关内容