ejemplo compress linux shell unix gzip bzip2

linux - compress - Cómo usar awk para un archivo comprimido



gzip unix (3)

Necesitas leerlos archivos comprimidos como este:

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

Prueba esto:

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

¿Cómo puedo cambiar el siguiente comando para un archivo comprimido?

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

El comando funciona bien con el archivo normal. Necesito cambiar el comando para archivos comprimidos.


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

o

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

EDITAR:

Para escribir la salida comprimida simplemente agregue

| bzip2 >output.vcf.bz2

o

| gzip >output.vcf.gz

Esto funcionará con cualquier programa que imprima resultados en una salida estándar.

Por cierto: la edición de líneas de comando tan grandes se vuelve tediosa muy rápidamente. Debes considerar escribir un script de shell pequeño para hacer el trabajo. Esto tiene el beneficio adicional de que no tiene que recordar todo y puede repetir fácilmente el comando o modificarlo si es necesario.

Un buen punto de partida para la programación de shell de Linux es la Inroducción de Programación Bash de Mike G.


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

No podría saber cuál de todos estos métodos funciona mejor, zcat es al menos más rápido de escribir;)