【发布时间】:2016-03-23 22:03:03
【问题描述】:
这已被多次询问,但由于某种原因,我的解决方案无法正常工作。两个 .txt 文件:
文件 1.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
文件2.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。我做错了什么?
【问题讨论】:
-
b=a[...]是分配。如果您不需要来自file1.txt的行,那么您首先不需要将其存储在a中。