2つのファイルを比較し、一致するコンテンツを無視し、ファイル2の一致しないコンテンツを特定の形式でファイル1に追加します。

2つのファイルを比較し、一致するコンテンツを無視し、ファイル2の一致しないコンテンツを特定の形式でファイル1に追加します。

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]=1seen$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

おすすめ記事