csvファイルの2つの列を比較し、一致しないレコードのみを表示する

csvファイルの2つの列を比較し、一致しないレコードのみを表示する

次の形式のcsvファイルがあります。

1311,0008,a131,a131,7039
1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099
1711,2048,a626565,a626565,7035

私が望むのは、列3と4のみを比較し、一致しない場合は新しいファイルにその行を印刷し、一致する場合はその行を別のファイルに印刷することです。

予想されるFile1出力(列3と4が一致しません):

1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099

File2の予想出力(列3と4が一致):

1311,0008,a131,a131,7039
1711,2048,a626565,a626565,7035

これまでは複数のファイルを比較してみました。

ベストアンサー1

awk -F, '{ print >($3==$4?"matchedFile":"notMatchedFile") }' infile

列#3が同じ場合は、オプションで2つの出力ファイルのいずれかに行をリダイレクトします。完全な文字列一致列#4(カンマで区切られた列、で指定されている-F,)を使用して、以下を作成します。matchedFile出力ファイル、それ以外の場合は書き込みnotMatchedFile

バラよりその他のマッチングオプションはこちら


$ head matchedFile notMatchedFile
==> matchedFile <==
1311,0008,a131,a131,7039
1711,2048,a626565,a626565,7035

==> notMatchedFile <==
1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099

または似ていますが、コマンドをより簡潔にします。

awk -F, '{ print >"file"($3==$4) }' infile

$ head file[01]
==> file0 <==
1311,0008,a131,a132,7039
1711,2046,a626565,a626566,7099

==> file1 <==
1311,0008,a131,a131,7039
1711,2048,a626565,a626565,7035

おすすめ記事