如何使用awk打印特定的列条件?

如何使用awk打印特定的列条件?

我有一个输入文件:

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

只需替换printprintf即可在同一行上打印值,并在该行完成迭代后插入新行:

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

相关内容