我有一个输入文件:
A 123 name: 1 AAA
B 123 name: 2 AAA name: 3 BBB
C 234 name: 1 AAA name: 2 BBB name: 5 CCC
如果该列是“名称:”,我想打印下一列和下一列。
这是我的 awk 代码:
cat input.txt | awk '{for(i=1;i<=NF;i++)if($i == "name:")print $(i+1),$(i+2)}'
但是,在本例中,所有列都列在一行中,如下所示:
1 AAA
2 AAA
3 BBB
1 AAA
2 BBB
5 CCC
我希望像这样打印列:
1 AAA
2 AAA 3 BBB
1 AAA 2 BBB 5 CCC
答案1
只需替换print
为printf
即可在同一行上打印值,并在该行完成迭代后插入新行:
awk '{{for(i=1;i<=NF;i++)if($i == "name:") printf $(i+1)" "$(i+2)" "} print ""; }' yourfile
输出:
1 AAA
2 AAA 3 BBB
1 AAA 2 BBB 5 CCC