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

관련 정보