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)
只需更换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)
| 归档时间: |
|
| 查看次数: |
2247 次 |
| 最近记录: |