パターンマッチング後に現在の行の次のn番目の列を印刷する方法は?

パターンマッチング後に現在の行の次のn番目の列を印刷する方法は?

次の行の最初の列と2番目の列が現在の行と同じ場合、各行の最後の列を現在の行に印刷したいと思います。

私の入力ファイルは

 A 123 BC
 A 123 DD
 A 123 TT
 B 456 AA
 B 456 RR
 C 789 EE

希望の出力は

 A 123 BC DD TT
 B 456 AA RR
 C 789 EE

ベストアンサー1

awk:

awk '{a[$1FS$2]=a[$1FS$2]FS$NF} END {for(i in a) print i a[i]}' 
  • a[$1FS$2]=a[$1FS$2]FS$NF連想配列のキーをフィールド区切り文字で区切った最初の 2 つのフィールドに設定し、値をフィールド区切り文字で前の値に関連付けられた最後のフィールドに設定します。

  • END {for(i in a) print i a[i]}最後に実行したら、配列のキーを繰り返してaキーとその値を印刷します。

例:

% cat file.txt 
A 123 BC
A 123 DD
A 123 TT
B 456 AA
B 456 RR
C 789 EE

% awk '{a[$1FS$2]=a[$1FS$2]FS$NF} END {for(i in a) print i a[i]}' file.txt
A 123 BC DD TT
B 456 AA RR
C 789 EE

おすすめ記事