Awk 比较两个文件是否匹配,如果发现重复匹配,则只打印一个

Awk 比较两个文件是否匹配,如果发现重复匹配,则只打印一个,awk,Awk,我有两份档案。文件1和文件2。File2有一些重复条目,由于文件结构的复杂性,我无法删除这些条目。现在,在生成File3时,File1和File2之间将有一个匹配的第1列和第2列;我只想从File2获得一个条目,用于匹配File1中的模式。最好的方法是什么。我在{print$0}文件1文件2中尝试了awk'NR==FNR{a[$1,$2]=$0;next}($1,$2),但它保留了文件2中所有匹配的条目 File1 ab 12 cd 24 ef 56 File2 ab 12 ab 12 ef

我有两份档案。文件1和文件2。File2有一些重复条目,由于文件结构的复杂性,我无法删除这些条目。现在,在生成File3时,File1和File2之间将有一个匹配的第1列和第2列;我只想从File2获得一个条目,用于匹配File1中的模式。最好的方法是什么。我在{print$0}文件1文件2中尝试了
awk'NR==FNR{a[$1,$2]=$0;next}($1,$2),但它保留了文件2中所有匹配的条目

File1
ab 12
cd 24
ef 56

File2
ab 12
ab 12
ef 56
我得到的是

File3
ab 12
ab 12
ef 56
但我想要的是

File3
ab 12
ef 56

谢谢

找到匹配行后,您需要从
a
中删除条目

awk 'NR==FNR {a[$0]; next} ($0 in a) {delete a[$0]; print}' File1 File2
还有一些方法

输入:

$ cat f1
ab 12
cd 24
ef 56

$ cat f2
ab 12
ab 12
ef 56
输出:

$ awk '{k=$1 SUBSEP $2}FNR==NR{a[k]; next}k in a && !a[k]++' f1 f2
ab 12
ef 56
为了更好的可读性
++a[k]==1
(通过考虑线程标题“比较两个文件是否匹配,如果发现重复匹配,则仅打印一个文件”)


谢谢你的回复。但是我试图避免使用sort命令。实际上,我的File2是一个fastq文件。无论如何,谢谢。我认识了一个新的命令“comm”
$ awk '{k=$1 SUBSEP $2}FNR==NR{a[k]; next}k in a && ++a[k]==1' f1 f2
ab 12
ef 56