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

match 1,2,5 columns of file1 with 1,2,3 columns of file2 respectively and output should have matched rows from file 2. second file is zipped file .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[,,]++;next} a[,,]' file1.txt  - > output.txt

但它不起作用

请尝试按照 awk 代码为您显示的示例。使用 zcat 读取您的 .gz 文件,然后在使用 file1.

完成读取后将其作为第二个输入传递给 awk 程序进行读取
zcat your_file.gz | awk 'FNR==NR{arr[,,];next} ((,,) in arr)' file1 -

修复 OP 的尝试:

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