27

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

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

该命令适用于普通文件。我需要更改压缩文件的命令。

4

3 回答 3

26

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

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
于 2012-10-30T13:25:29.973 回答
19
zcat FILE | awk '{ ...}'

我无法判断所有这些方法中哪种方法效果最好,zcat 至少打字速度更快;)

于 2014-05-26T13:42:49.497 回答
6
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 Introduction 。

于 2012-10-30T10:57:52.783 回答