2つのファイルがあり、file1 2nsおよび3 ed列をfile2の最初と2番目の列と比較する必要があります。一致した場合は保持し、そうでない場合は2019を最初の列として追加し、最後の列データとしてゼロを追加してfile1を追加する必要があります。可能ですか?
ファイル1
2019 ABCD 1 10
2019 DEF 2 11
2019 GHI 1 20
2019 jkl 2 25
ファイル2
ABCD 1
jkl 1
mnop 2
qrst 1
予想される結果
2019 ABCD 1 10
2019 DEF 2 11
2019 GHI 1 20
2019 jkl 2 25
2019 jkl 1 0
2019 mnop 2 0
2019 qrst 1 0
ベストアンサー1
この試み:
awk '
FNR==NR {seen[$2,$3]=1; print $0 }
FNR!=NR && !seen[$1,$2] { print 2019,$0,0 }
' file1 file2
説明する:
FNR==NR { ... }
最初のファイルでのみ括弧内のコマンドを実行します。seen[$2,$3]=1
、seen
$2、$3 キーを持つ配列を 1 に設定します。print $0
行全体を印刷します。FNR!=NR && !seen[$1,$2] { ... }
seen
括弧内のコマンドは、最初のファイルではなく、$ 1、$ 2フィールドが配列のキーではない場合にのみ実行されます。print 2019,$0,0
新しい列2019と0に囲まれた行を印刷します。
ソートされた出力が追加されました| column -t
。
出力:
$ awk 'FNR==NR{seen[$2,$3]++; print $0} FNR!=NR && !seen[$1,$2]{print 2019,$0,0}' file1 file2 | column -t
2019 ABCD 1 10
2019 DEF 2 11
2019 GHI 1 20
2019 jkl 2 25
2019 jkl 1 0
2019 mnop 2 0
2019 qrst 1 0