分别将 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 命令传递)时检查条件时,只需检查相应的字段是否存在于数组中,如果是,则打印该行。
文件 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 命令传递)时检查条件时,只需检查相应的字段是否存在于数组中,如果是,则打印该行。