我希望在不解压缩file2的情况下匹配file1.txt和file2.gz之间的多个列。
file 1.txt:
1 11710779 -
1 12919623 CC
file2.gz:
1 13380 . C G 7829.15 VQSRTrancheSNP99.60to99.80 AC=30;AC_AFR=14;AC_AMR=1;AC_Adj=15;AC_EAS=0;AC_FIN=0
1 13382 . C G 320.40 VQSRTrancheSNP99.60to99.80 AC=3;AC_AFR=0;AC_AMR=0;AC_Adj=1;AC_EAS=0;AC_FIN=0;AC
1
我希望将file1.txt中的$ 1,$ 2,3与file.gz中的$ 1,$ 2,$ 4匹配,并返回file2中的所有行。
我试过
awk -F '\t' 'NR==FNR{c[$1$2$4]++;next};c[$1$2$3] > 0' file2.gz file1.txt
和
awk -F '\t' 'NR==FNR{a[$1,$2,$3]++;next} (a[$1,$2,$4])' file1.txt file2.gz
这两个命令都不起作用。当我单独grep其中一些时,file1中的内容存在于file2中。 在运行命令之前,我不确定是否需要首先解压缩file2。我无法解压缩文件,因为它太大了。
答案 0 :(得分:1)
尝试这种方法:
$ cat > test.in
1 2
3 4
$ gzip test.in
$ awk '{print $1}' <(gunzip -c test.in.gz)
1
3
答案 1 :(得分:1)
zcat file2.txt.gz | awk -F '\t' 'NR==FNR{a[$1,$2,$3]++;next} a[$1,$2,$4]' file1.txt -
awk的两个文件参数是file1.txt
和-
。第二个文件-
告诉awk从标准输入读取file2.txt.gz
让我们考虑这两个示例文件:
$ cat file1.txt
1 11710779 -
1 12919623 CC
1 13382 C
和
$ zcat file2.txt.gz
1 13380 . C G 7829.15 VQSRTrancheSNP99.60to99.80 AC=30;AC_AFR=14;AC_AMR=1;AC_Adj=15;AC_EAS=0;AC_FIN=0
1 13382 . C G 320.40 VQSRTrancheSNP99.60to99.80 AC=3;AC_AFR=0;AC_AMR=0;AC_Adj=1;AC_EAS=0;AC_FIN=0;AC
现在,让我们运行命令:
$ zcat file2.txt.gz | awk -F '\t' 'NR==FNR{a[$1,$2,$3]++;next} a[$1,$2,$4]' file1.txt -
1 13382 . C G 320.40 VQSRTrancheSNP99.60to99.80 AC=3;AC_AFR=0;AC_AMR=0;AC_Adj=1;AC_EAS=0;AC_FIN=0;AC