如何使用awk压缩文件

AKR*_*AKR 26 unix linux shell gzip bzip2

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

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

该命令与普通文件一起正常工作.我需要更改压缩文件的命令.

Ste*_*eve 24

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

awk '{ ... }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz)
Run Code Online (Sandbox Code Playgroud)

试试这个:

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
Run Code Online (Sandbox Code Playgroud)


run*_*el0 16

zcat FILE | awk '{ ...}'
Run Code Online (Sandbox Code Playgroud)

我无法分辨出哪种方法效果最好,zcat至少可以更快地输入;)

  • 而不是zcat,我使用了`gzcat` - 在操作系统上并不完全相同 (4认同)

Mac*_*ser 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] }'
Run Code Online (Sandbox Code Playgroud)

要么

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] }'
Run Code Online (Sandbox Code Playgroud)

编辑:

要编写压缩输出,只需附加

| bzip2 >output.vcf.bz2
Run Code Online (Sandbox Code Playgroud)

要么

| gzip >output.vcf.gz
Run Code Online (Sandbox Code Playgroud)

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

顺便说一句:编辑如此大的命令行会很快变得乏味.你应该考虑编写一个小的shell脚本来完成这项工作.这样做的另一个好处是,您无需记住整个过程,并且可以轻松地重复命令或在必要时进行修改.

Linux shell编程的一个很好的起点是Mike G. 的Bash编程生产.