このような2つのcsvファイルがあります。
422174,XN,20.99,2020-09-01,2022-01-20 20:20:28.613+00
421348,SB,21.99,2021-01-26,2022-01-20 20:20:28.613+00
885176,XN,41.80,2021-11-17,2022-01-20 20:20:28.613+00
881751,SB,12.81,2020-09-01,2022-01-20 20:20:28.613+00
722483,XN,67.50,2020-09-01,2022-01-20 20:20:28.613+00
2番目のファイル。
422174,XN,25.99,2020-09-01,2022-01-21 20:20:28.613+00
667843,XN,22.99,2020-09-01,2022-01-20 20:20:28.613+00
421348,SB,21.99,2021-01-26,2022-01-20 20:20:28.613+00
885176,XN,41.80,2021-11-17,2022-01-20 20:20:28.613+00
881751,SB,12.81,2020-09-01,2022-01-20 20:20:28.613+00
156734,XN,34.50,2020-09-01,2022-01-20 20:20:28.613+00
出力は次のようになります。
667843,XN,22.99,2020-09-01,2022-01-20 20:20:28.613+00
156734,XN,34.50,2020-09-01,2022-01-20 20:20:28.613+00
しかし、問題は、これら2つのcsvファイルを列1と列2でのみ比較する必要があることです。
例えば。
file1.csvの列1 - 列2 = file2.csvの列1 - 列2の場合、これは違いと見なすべきではありません。
最後の列はfile1と異なる場合がありますが、列1と列2は同じでなければならないため、違いはありません。
この目標をどのように達成できますか?
答え1
awkを使用してください。
$ awk -F, 'NR==FNR{a[$1,$2]; next} !(($1,$2) in a)' file1.csv file2.csv
667843,XN,22.99,2020-09-01,2022-01-20 20:20:28.613+00
156734,XN,34.50,2020-09-01,2022-01-20 20:20:28.613+00
答え2
見事に活用できますミラーそして、正しいファイル(2番目のファイル)からペアになっていない行を取得する一般的なJOIN操作は次のとおりです。
ランニング:
mlr --csv -N join --np --ur -j 1,2 -f input_01.csv then unsparsify input_02.csv
あなたは得る
667843,XN,22.99,2020-09-01,2022-01-20 20:20:28.613+00
156734,XN,34.50,2020-09-01,2022-01-20 20:20:28.613+00
いくつかの注意:
-N
ヘッダがないようにCSVを設定します。--np
ペアリング履歴がありません--ur
正しいファイルからペアリングされていないレコードをエクスポートします。-j 1,2
接続フィールドの設定