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

use*_*046 6 awk text-processing

我有一个输入文件:

A 123 name: 1 AAA  
B 123 name: 2 AAA name: 3 BBB  
C 234 name: 1 AAA name: 2 BBB name: 5 CCC 
Run Code Online (Sandbox Code Playgroud)

如果列是“名称:”,我想打印下一列和下一列。

这是我的 awk 代码:

cat input.txt | awk '{for(i=1;i<=NF;i++)if($i == "name:")print $(i+1),$(i+2)}'
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,所有列都列在如下一行中:

1 AAA  
2 AAA  
3 BBB  
1 AAA  
2 BBB  
5 CCC
Run Code Online (Sandbox Code Playgroud)

我希望列像这样打印:

1 AAA  
2 AAA 3 BBB    
1 AAA 2 BBB 5 CCC
Run Code Online (Sandbox Code Playgroud)

Wis*_*lah 7

只需更换print与printf打印在同一行的价值,并完成对行迭代后插入新行:

awk '{{for(i=1;i<=NF;i++)if($i == "name:") printf $(i+1)" "$(i+2)" "} print ""; }' yourfile
Run Code Online (Sandbox Code Playgroud)

输出:

1 AAA 
2 AAA 3 BBB 
1 AAA 2 BBB 5 CCC
Run Code Online (Sandbox Code Playgroud)