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] }'
EDIT:
Per scrivere output compresso basta aggiungere
| bzip2 >output.vcf.bz2
o
| gzip >output.vcf.gz
Funzionerà con qualsiasi programma che stampa i risultati sullo standard output.
BTW: La modifica di righe di comando così grandi diventa noiosa molto rapidamente. Dovresti considerare di scrivere un piccolo script di shell per fare il lavoro. Questo ha l'ulteriore vantaggio di non dover ricordare l'intera cosa e può facilmente ripetere il comando o modificarlo se necessario.
Un buon punto di partenza per Linux programmazione della shell è il Bash Programming Inroduction da Mike G.
fonte
2012-10-30 10:57:52
'zcat' è equivalente a' gzip -dc' (su alcuni sistemi potrebbe essere 'gzcat') – arekolek