2つのカンマ区切りファイルを比較し、違いを出力します。

2つのカンマ区切りファイルを比較し、違いを出力します。

共通列にある2つの類似ファイルを比較して違いを出力したいと思います。これらのファイルには同じヘッダーがあります。特定の列の違いを確認したいです。

2番目のファイルFile2には追加の行があるかもしれませんが、file1列-Column2値とfile2列-Column2値の一致を比較し、Column3値に違いがある場合は印刷したいと思います。

ファイル1

Column1,Column2,Column3
Demosvc1,Demopod1,70647625e1b016f8c2b21eae7465b30e0b0375ea
Demosvc2,Demopod2,<none>
Demosvc3,Demopod3,0b12b9218e1a572e994a6b616059a618e8f5d9a0
Demosvc4,Demopod4,ca9802f0636c23d20daad17498b26df000205626
Demosvc6,Demopod6,ca9802f0636c23d20daad17498b26df000205626

ファイル2

Column1,Column2,Column3
Demosvc1,Demopod1,70647625e1b016f8c2b21eae7465b30e0b0375ea
Demosvc2,Demopod2,20fd5948a80c5b06989f34b1c23a8e64afb7943e
Demosvc3,Demopod3,0b12b9218e1a572e994a6b616059a618e8f5d9a0
Demosvc4,Demopod4,551fbe73e835528da8269bac3652c6a64ecf4097
Demosvc5,Demopod5,4ae6230593c13b3a50e7b8e6cf0fe5fcc4a0fda2
Demosvc6,Demopod6,ca9802f0636c23d20daad17498b26df000205626

違いをこのように印刷したいと思います。

希望の出力

Demopod2,<none>,20fd5948a80c5b06989f34b1c23a8e64afb7943e
Demopod4,ca9802f0636c23d20daad17498b26df000205626,551fbe73e835528da8269bac3652c6a64ecf4097

ベストアンサー1

awk -F',' '{
  if (NR==FNR) a[$1$2]=$3
  else if (a[$1$2]!="" && a[$1$2]!=$3) print $2","a[$1$2]","$3
}' file1 file2

a最初のファイルを処理するときは、最初と2番目のフィールドをキーとして3番目のフィールドの値を配列に保存します。

2番目のファイルを処理するときは、3番目のフィールドの値と一致しない空でない配列値のキーを比較してください。この場合、2番目のフィールド、配列値、3番目のフィールドを印刷します。

おすすめ記事