将 awk 与两个文件一起用作过滤器

Use awk with two files as a filter

我想知道这是否可行:

我有两个文件:

文件一个:

100005282       C
100016196       G
100011755       C
100012890       G
100016339       C
100013563       C
100015603       G
100008436       G
100004906       C

和文件 b:

rs10904494    100004906 A C
rs11591988    100005282 C T
rs10904561    100008436 T G
rs7906287    100011755 A G
rs9419557    100012890 A G
rs9286070    100013563 T C
rs9419478    100015603 G C
rs11253562   100016196 G T
rs4881551    100016339 C A

根据文件a中$1中的数字和文件b中的$2中的数字,比较[=27=中$2中的字母]file a 与 file b 中的相同数字,最后结果必须是这样的:

rs10904494    100004906 A C
rs10904561    100008436 T G
rs7906287    100011755 A G
rs9419557    100012890 A G
rs9286070    100013563 T C

只显示不匹配的结果。

可以用 awk 做到这一点吗?

如果您在使用 awk 时遇到问题,也许使用 grep 会更简单,例如

cat file1.txt
100005282   C
100016196   G
100011755   C
100012890   G
100016339   C
100013563   C
100015603   G
100008436   G
100004906   C

cat file2.txt
rs10904494  100004906   A   C
rs11591988  100005282   C   T
rs10904561  100008436   T   G
rs7906287   100011755   A   G
rs9419557   100012890   A   G
rs9286070   100013563   T   C
rs9419478   100015603   G   C
rs11253562  100016196   G   T
rs4881551   100016339   C   A

grep -vFwf file1.txt file2.txt
rs10904494  100004906   A   C
rs10904561  100008436   T   G
rs7906287   100011755   A   G
rs9419557   100012890   A   G
rs9286070   100013563   T   C

否则,这应该适用于您的用例:

awk -F'\t' 'NR==FNR {A[,]; next} !(,) in A' file1.txt file2.txt
rs10904494  100004906   A   C
rs10904561  100008436   T   G
rs7906287   100011755   A   G
rs9419557   100012890   A   G
rs9286070   100013563   T   C

这似乎是您正在寻找的逻辑

$ awk 'NR==FNR{a[]=; next} a[]!=' file1 file2

rs10904494    100004906 A C
rs10904561    100008436 T G
rs7906287    100011755 A G
rs9419557    100012890 A G
rs9286070    100013563 T C

将 file1 $1 与 file2 $2 匹配并在 file1 $2 != file2 $3 时打印