sedを使用してgzip圧縮ファイルを変更し、ファイルを再圧縮する方法は?

sedを使用してgzip圧縮ファイルを変更し、ファイルを再圧縮する方法は?

次の側面を持つ.vcf.gzファイルがあります。

#CHROM  POS     ID      REF     ALT          
chr1    10894   chr1:10894:G:A  G       A         
chr1    10915   chr1:10915:G:A  G       A          
chr1    10930   chr1:10930:G:A  G       A 

CHROM列を修正して「chr」を削除して別のものに変更したいので、次のようなものを取得したいと思います。

#CHROM  POS     ID      REF     ALT          
1    10894   chr1:10894:G:A  G       A         
1    10915   chr1:10915:G:A  G       A          
1    10930   chr1:10930:G:A  G       A 

だから私は次のコマンドラインを作成しました。

zcat input.vcf.gz | sed 's/^chr//' > output.vcf.gz

効果がありました。問題は、出力ファイルを拡張子がvcf.gzの圧縮ファイルとして保存したいということです。 「output.vcf.gz」と書いても出力ファイルは圧縮されません。

圧縮ファイルを変更して圧縮ファイルとして保存するにはどうすればよいですか?

とても感謝しています!

答え1

zcat実際には便利な機能ですgzip。 // マンページgzip引用 ( ):gunzipzcatman zcat

このzcatコマンドはと同じですgunzip -c

パイプラインプログラムチェーンで(または)を使用できるように、次のようにgunzip -c再圧縮できます。zcatgzip

zcat input.vcf.gz | sed 's/^chr//' | gzip > output.vcf.gz
#                                    ^^^^

または

gunzip -c input.vcf.gz | sed 's/^chr//' | gzip > output.vcf.gz
#^^^^^^^^                                 ^^^^

一貫性が好きなら。

それはすべてです。ここにあるすべてがそれです。

ああ、賭けます。あなたは生物情報学をしており、vcfファイルは実際には「Variant Call Format」ファイルであり、おそらくかなり大きいでしょう。gzip非常に高速の圧縮解除ではありませんが、かなり遅い圧縮機です。 gzip圧縮ファイル形式が利用できない場合、

unpigz -c input.vcf.gz | sed 's/^chr//' | pigz > output.vcf.gz
#^^^^^^^^                                 ^^^^

pigzとまったく同じgzipですが、複数のCPUコアに拡張可能です。それを書いてください。

あなたならどうでしょうか?いいえこれらのファイルはgzipコンテナに保存する必要がありますが、より現代的な形式を自由に選択できます。

unpigz -c input.vcf.gz | sed 's/^chr//' | zstd   -T0   -8 > output.vcf.zst
# decompress using     |                | ^^^^   ^^^   ^^
# unpigz instead of    |     modify     |  \--\   \-\   \\  compression ratio
# gzip/zcat            |                |      \     \    \ -0=very fast 18=very compressed
#                      |                |       \     \     -8 is much better compressed
#                      |                |        \     \    than gzip --best, but faster
#                      |                |         \     \
#                      |                |          \     \- Use as many threads as CPU cores
#                      |                |           \
#                      |                |            \
#                      |                |             \---- Use zstd instead of gzip

答え2

パイプラインにgzipを追加するだけです。

zcat input.vcf.gz | sed 's/^chr//' | gzip > output.vcf.gz

関連情報