【问题标题】:Comparing columns in separate .txt files比较单独 .txt 文件中的列
【发布时间】: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 中。

标签: unix awk


【解决方案1】:

这行得通:

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

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2015-12-02
    相关资源
    最近更新 更多