2012-10-30 50 views
17

圧縮ファイルに対して次のコマンドを変更するにはどうすればよいですか?圧縮ファイルにawkを使用する方法

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

コマンドは正常なファイルで正常に動作します。圧縮ファイルのコマンドを変更する必要があります。

答えて

17

によってBash Programming Inroductionです:

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 
+0

'zcat'は' gzip -dc'と同等です(いくつかのシステムでは 'gzcat'が可能です) – arekolek

5
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] }' 

EDIT:

だけ

| bzip2 >output.vcf.bz2 

または

| gzip >output.vcf.gz 
を追加し、圧縮出力を書き込むには

これは、結果を標準出力に出力するプログラムで動作します。

ところで、このような大きなコマンドラインを編集するのは非常に面倒です。あなたは仕事をするために小さなシェルスクリプトを書くことを検討すべきです。これには、全体を覚えておく必要がなく、必要に応じて簡単にコマンドを繰り返したり変更したりできるという利点があります。 Linuxシェルプログラミングのための

良い出発点は、あなたが彼らにこのような圧縮ファイルを読む必要がマイクG.

+0

出力はgz形式になりますか?gzip -dc input1.vcf.gz ** input2.vcf.gz | awk 'FNR == NR {配列[$ 1、$ 2] = $ 8; array $ {print $ 0 ";"}の中の{next}($ 1、$ 2) array [$ 1、$ 2]} '> output.vcf.gz ** – AKR

+1

@ user1782877:試してみてください: 'command | gzip> output.vcf.gz' – Steve

+0

@ user1782877更新されたアンサーを参照してください。 –

9
zcat FILE | awk '{ ...}' 

awk '{ ... }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz) 

はこれを試してみてください

これらの方法のどれがうまくいくかわかりませんが、zcatは少なくともより速く入力する;)

+2

zcatの代わりに' gzcat'を使用しました。 – nevets1219

関連する問題