如何更改以下命令以适用于压缩文件?
awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' input1.vcf input2.vcf
这个命令在正常文件上运行良好。我需要修改命令以处理压缩文件。
你需要像这样读取压缩文件:
awk '{ ... }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz)
试一下这个:
awk 'FNR==NR { sub(/AA=\.;/,""); array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz) | gzip > output.vcf.gz
zcat FILE | awk '{ ...}'
我无法确定所有这些方法中哪种方法最好,但至少zcat的输入速度更快 ;)
gzcat
代替zcat
,在不同的操作系统中二者并不完全相同。 - nevets1219bzip2 -dc input1.vcf.bz2 input2.vcf.bz2 | awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }'
或者
gzip -dc input1.vcf.gz input2.vcf.gz | awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }'
编辑:
为了输出压缩的内容,只需要在末尾添加
| bzip2 >output.vcf.bz2
或者
| gzip >output.vcf.gz
zcat
相当于gzip -dc
(在某些系统上可能是gzcat
)。 - arekolek