2012-10-30 14 views
17

Wie kann ich den folgenden Befehl für eine komprimierte Datei ändern?So verwenden Sie awk für eine komprimierte Datei

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

Der Befehl funktioniert gut mit normaler Datei. Ich muss den Befehl für komprimierte Dateien ändern.

Antwort

17

Sie müssen sie komprimierte Dateien wie folgt zu lesen:

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

starten:

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 
+0

'zcat' ist äquivalent zu' gzip -dc' (auf manchen Systemen könnte es 'gzcat' sein) – arekolek

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

oder

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:

komprimierte Ausgabe zu schreiben hängen Sie einfach

| bzip2 >output.vcf.bz2 

oder

| gzip >output.vcf.gz 

Dies funktioniert mit jedem Programm, das Ergebnisse als Standardausgabe ausgibt.

BTW: Bearbeiten solcher großen Befehlszeilen wird sehr schnell langweilig. Sie sollten überlegen, ein kleines Shell-Skript zu schreiben, um die Aufgabe zu erledigen. Dies hat den zusätzlichen Vorteil, dass Sie sich nicht an das Ganze erinnern müssen und den Befehl einfach wiederholen oder bei Bedarf ändern können.

Ein guter Ausgangspunkt für Linux-Shell-Programmierung ist die Bash Programming Inroduction von Mike G.

+0

Ist diese Ausgabe wird in GZ-Format gzip -dc input1.vcf.gz ** input2.vcf.gz | awk 'FNR == NR {array [$ 1, $ 2] = $ 8; next} ($ 1, $ 2) im Array {print $ 0 ";" array [$ 1, $ 2]} '> output.vcf.gz ** – AKR

+1

@ user1782877: Probieren Sie: 'command | gzip> output.vcf.gz' – Steve

+0

@ user1782877 Siehe die aktualisierte Anser. –

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

Ich könnte nicht sagen, welche von allen diesen Methoden am besten funktioniert, zcat ist mindestens schneller zu schreiben;)

+2

Anstelle von zcat habe ich' gzcat' verwendet - nicht genau dasselbe über das Betriebssystem – nevets1219

Verwandte Themen