![将一个文件与另一个文件的列进行比较](https://linux22.com/image/85292/%E5%B0%86%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E7%9A%84%E5%88%97%E8%BF%9B%E8%A1%8C%E6%AF%94%E8%BE%83.png)
我有一个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