将一个文件与另一个文件的列进行比较

将一个文件与另一个文件的列进行比较

我有一个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

或者通过两次传递并假设文件按连接键排序:

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

相关内容