あるファイルの列を別のファイルと比較する

あるファイルの列を別のファイルと比較する

File1次のデータを含むファイルがあります。

aaa
bbb

他のファイルのデータはFile2次のとおりです。

2,aaa,234
w,bbb,589
4,ccc,675

File1データを列2のデータと比較しFile2、一致するデータをあるファイルに印刷し、一致しないデータを別のファイルに印刷する必要があります。

答え1

awk -F '
  !b{a[$0]; next}
  $2 in a {print > "matching.txt"; next}
  {print > "non-matching.txt"}' file1 b=1 file2

あるいは、2つのパスを作成し、ファイルが結合キーに基づいてソートされると仮定すると、次のようになります。

join -t , -2 2 -o 2.1,2.2,2.3 file1 file2 > matching.txt
join -t , -2 2 -v 2 -o 2.1,2.2,2.3 file1 file2 > non_matching.txt

答え2

cutこの文は正しいフィールドを選択して一致するものを見つけるために使用されますgrep。一致するものと一致しない項目は、それぞれと呼ばれるMatchingファイルに追加されますNonMatching

for x in $(cut -d, -f2 File2); do grep -q "$x" File1 && echo "$x" >> Matching || echo "$x" >> NonMatching; done

答え3

以下は、レコードを一致させるコマンドです。

awk -F, 'FNR==NR{f1[$1]=$0;next}$2  in f1{print $0}' OFS="," file1 file2 > matchedRecords.txt

関連情報