
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