分别将 file1 的 1,2,5 列与 file2 的 1,2,3 列匹配,输出应与文件 2 中的行匹配第二个文件是压缩文件 .gz

问题描述

文件 1

3   1234581 A   C   rs123456

file2 压缩文件 .gz

1   1256781 rs987656    T   C
3   1234581 rs123456    A   C
22  1792471 rs928376    G   T

输出

3   1234581 rs123456    A   C

我试过了

zcat file2.gz | awk 'NR==FNR{a[$1,$2,$5]++;next} a[$1,$3]' file1.txt  - > output.txt

但它不起作用

解决方法

请尝试按照 awk 代码查看您显示的示例。使用 zcat 读取您的 .gz 文件,然后将其作为第二个输入传递给 awk 程序进行读取,在使用 file1 完成读取后。

zcat your_file.gz | awk 'FNR==NR{arr[$1,$2,$5];next} (($1,$3) in arr)' file1 -

OP 尝试中的修复:

  • 在文件 1 中创建数组时不需要增加数组的值。只需在其中存在索引就足够了。
  • 在读取 file2 时检查条件(由 zcat 命令传递),只需检查数组中是否存在相应字段,如果是,则打印该行。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...