比较单独的.txt文件中的列

时间:2016-03-23 13:28:09

标签: unix awk

这已被多次询问,但出于某种原因,我的解决方案无效。两个.txt文件:

FILE1.TXT

I   27804   C   A   0.987700768 1024    0.518987342
I   27810   T   C   0.99418488  1054    0.518987342
I   27816   G   A   0.994650485 1085    0.518987342
I   27822   T   C   0.998170732 1097    0.518987342
I   27825   C   T   0.998170732 1101    0.518987342

FILE2.TXT

I   27804   .   C   A   1115.77
I   27810   .   T   C   1141.77
I   27816   .   G   A   1141.77
I   27822   .   T   C   1141.77
I   27823   .   C   A   1141.77
I   27825   .   C   T   1141.77

File2.txt包含大量列(为清晰起见未显示)。

我希望在File1.txt中使用$ 1,$ 2,$ 3和$ 4来识别File2.txt中的相应行 - 然后打印完整的File2.txt行。

所需的输出将是:

I   27804   .   C   A   1115.77
I   27810   .   T   C   1141.77
I   27816   .   G   A   1141.77
I   27822   .   T   C   1141.77
I   27825   .   C   T   1141.77

跳过此条目:

I   27823   .   C   A   1141.77

因为File1.txt中没有。

我尝试过简单地使用:

awk 'NR==FNR{a[$1,$2,$3,$4]=$0;next}{if(b=a[$1,$2,$4,$5]){print b}}' file1.txt file2.txt

但这似乎不仅返回File1.txt行 - 而只是重新打印整个File1.txt。我做错了什么?

1 个答案:

答案 0 :(得分:1)

这有效:

awk 'NR==FNR{a[$1$2$3$4];next}{b=$1$2$4$5;if(b in a){print}}' file1.txt file2.txt