Comment puis-je modifier la commande suivante pour un fichier compressé?
awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' input1.vcf input2.vcf
La commande fonctionne correctement avec un fichier normal. J'ai besoin de changer la commande des fichiers compressés.
Vous devez les lire comme des fichiers compressés:
awk '{ ... }' <(gzip -dc input1.vcf.gz) <(gzip -dc input2.vcf.gz)
Essaye ça:
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 '{ ...}'
Je ne pourrais pas dire laquelle de toutes ces méthodes fonctionne le mieux, zcat est au moins plus rapide à taper;)
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] }'
ou
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] }'
ÉDITER:
Pour écrire une sortie compressée, ajoutez simplement
| bzip2 >output.vcf.bz2
ou
| gzip >output.vcf.gz
Cela fonctionnera avec tout programme qui imprime les résultats sur une sortie standard.
BTW: La modification de telles grandes lignes de commande devient très fastidieuse. Vous devriez envisager d'écrire un petit script Shell pour faire le travail. Cela présente l'avantage supplémentaire de ne pas avoir à se souvenir de tout et peut facilement répéter la commande ou la modifier si nécessaire.
Un bon point de départ pour la programmation Linux Shell est le Bash Programming Inroduction par Mike G.