web-dev-qa-db-ja.com

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

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

aaa
bbb

そして、次のようなデータを含む別のファイルFile2

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

File1データをFile2のc​​olumn2データと比較し、一致を1つのファイルに出力し、一致しないものを別のファイルに出力する必要があります。

6
vmadhav
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
4

このワンライナーは、cutを使用して適切なフィールドを選択し、grepを使用して一致を検索します。一致および非一致は、それぞれMatchingおよびNonMatchingという名前のファイルに追加されます。

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

1
Alexander

レコードを照合するコマンドは次のとおりです-

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