这已被多次询问,但出于某种原因,我的解决方案无效。两个.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。我做错了什么?
答案 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