圧縮ファイルの次のコマンドを変更するにはどうすればよいですか?
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は少なくともタイプするのが速いです;)
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
これは、結果を標準出力に出力するすべてのプログラムで機能します。
ところで、そのような大きなコマンドラインの編集は、非常に手間がかかります。あなたは仕事をするために小さなシェルスクリプトを書くことを考慮すべきです。これには、全体を覚える必要がないという利点があり、必要に応じてコマンドを簡単に繰り返したり変更したりできます。
Linux Shellプログラミングの良い出発点は、Mike Gによる Bash Programming Inroduction です。