
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