使用awk添加列。这个awk命令有什么问题?

时间:2012-03-22 11:43:53

标签: awk

我想在一个包含~10,000列的文件中添加两列。我想在每一行插入第一列nr 22。然后我希望原始的第一列作为第二列,然后作为第三列我想插入行nr(NR),然后我想要打印其余的原始列。我以为我可以用以下awk行来做到这一点:

awk '{print 22, $1, NR; for(i=2;i<=NF;++i) print $i}' file

它打印前三列(22,$ 1,NR),但之后,为每个值启动了一个新行,因此文件打印如下:

22 $1 NR
$2
$3
$4
etc...

而不是:

22 $1 NR $2 $3 $4 etc...

我做错了什么?

2 个答案:

答案 0 :(得分:4)

如果使用printfprint会添加换行符。

awk '{printf("%d, %d, %d, ", 22, $1, NR); for(i=2;i<=NF;++i) printf("%d, ", i)}' file

或者您可以使用ORSOFS输出记录分隔符输出字段分隔符。通常,您可以在BEGIN语句中添加这些语句:

awk 'BEGIN { ORS = " " } {print 22, $1, NR; for(i=2;i<=NF;++i) print $i}{print "\n"}' file 

请注意,需要额外的printf "\n",否则一切都会在一行上结束......

gawk manual output separators

中了解详情

答案 1 :(得分:1)

为了更准确地控制输出格式,而不是print(默认情况下打印换行符)提供的输出格式,请使用printf