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 

列が「name:」の場合は、次の列と次の列を印刷したいと思います。

これは私のawkコードです。

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

ただし、この例では、以下のようにすべての列が1行に一覧表示されます。

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

おすすめ記事