awkを使用して一致する列に基づいてファイルに列を追加し、行の順序を維持する方法

awkを使用して一致する列に基づいてファイルに列を追加し、行の順序を維持する方法

awkを使用してファイルの列を次のファイルと一致させ、その列がある場合は追加する方法。

ファイル1:

T36
T200
T77
T99
T100
T101
T110

ファイル2:

T36 aa  123
T36 aa  456
T200 cc 789
T99 aa  1011
T77 bb  1213
T77 bb  1415
T100 xx 1617

希望の出力:

T36 aa  123
T36 aa  456
T200    cc  789
T77 bb  1213
T77 bb  1415
T99 aa  1011
T100    xx  1617
T101
T110

私の出力ファイルからファイル1の順序を取得し、ファイル2にない行を印刷したいと思います。

これまでこれを行いましたが、完全ではなく一致する列のみを印刷しました。

awk 'NR == FNR { x[$1]=$1; next} { print x[$1], $0 }' file1 file2

助けてください!

ベストアンサー1

awk 'f==2 {map[$1] = ($1 in map) ? map[$1] ORS $0 : $0} 
     f==1 {print (($1 in map)? map[$1] : $1)}
' f=2 file2 f=1 file1

または同じFNR==NR慣用語を使用します。

awk 'FNR==NR {map[$1] = ($1 in map) ? map[$1] ORS $0 : $0; next} 
     {print (($1 in map)? map[$1] : $1)}
' file2 file1

出力:

T36 aa  123
T36 aa  456
T200 cc 789
T77 bb  1213
T77 bb  1415
T99 aa  1011
T100 xx 1617
T101
T110

おすすめ記事