如何使用awk来压缩文件

如何为压缩文件更改以下命令?

awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' input1.vcf input2.vcf 

该命令正常工作的文件。 我需要更改压缩文件的命令。

Solutions Collecting From Web of "如何使用awk来压缩文件"

你需要读取它们这样的压缩文件:

 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至少可以更快地输入;)

 bzip2 -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 

这将适用于任何将结果打印到标准输出的程序。

顺便说一句:编辑这样的大型命令行非常快速。 你应该考虑编写一个小shell脚本来完成这个工作。 这还有额外的好处,你不必记住整个事情,并可以轻松地重复命令或必要时修改它。

Linux shell编程的一个好的起点是Mike G.的Bash Programming Inroduction