2009-03-18 6 views
1

Ich möchte diesegunzip Vorform Aufgabe und rezip

awk -F, '$1 ~ /F$/' file.dat 

auf einer ganzen direcory von gziped Dateien ausführen

Ich möchte durch jede Datei in Schleife in der Lage sein, unzip es den obigen Befehl auszuführen (auszudrucken irgendwelche Erkenntnisse) rezip und bewegen Sie auf die nächste gezippte Datei

Wie kann dies getan werden?

Dank

+0

zcat ist ytour Freund –

Antwort

0

wie etwa ein Shell-Skript, das tut:

gunzip $1.gz 
awk -F, '$1 ~ /F$/' $1 
gzip $1 

So stellen Sie sicher $1 nicht die .gz Erweiterung hat.

dann können Sie so etwas wie:

find -name \*.gz -type f|xargs my_shell_script 
+0

Ich weiß nicht, wie Shell-Skripte zu tun .... noch –

3

Nun, wenn Sie alles in einer Zeile haben müssen:

find . -name \*.gz -print0 | xargs -0 gunzip -c | awk -F, '$1 ~ /F$/' 

Das sollte Arbeit für Sie

+0

Außer, dass es nicht am Ende rezip. –

2

Es sieht für mich, dass Sie Zeilen ausgeben möchten, bei denen das erste Feld in einer durch Kommas getrennten Liste von Feldern mit 'F'

endet 210

Wenn es Ihnen egal ist, welche .gz-Datei die Zeilen enthalten, oder welche Datei in der gezippten Datei - das heißt, Sie wollen nur die Zeilen aufgelistet - müssen Sie nicht einmal die. gz-Dateien zuerst, so müssen Sie sie nicht erneut zippen.

zcat file.gz | awk -F, '$1 ~ /F$/' 

Verwenden Sie für jede Datei in der aktuellen Verzeichnisstruktur eine Suche mit Xargs. Dieses Beispiel schränkt sie nur auf das aktuelle Verzeichnis, sondern nur die „-maxdepth 1“ lassen Sie den ganzen Verzeichnisbaum

find . -maxdepth 1 -name \*.gz -print0 | xargs -0 zcat | awk -F, '$1 ~ /F$/' 

Dies sagt zu bekommen Dateien zu finden, die in „gz“ und schreiben ihre Namen enden mit einem NUL-Terminator (die 0 in -print0), Pipe, die Ausgabe durch xargs, die die Liste auseinander auf NUL Chakraktoren (die "-0" arg) auswählen und zcat auf den Dateien ausführen wird. Pipe , die Ausgabe durch Ihre awk Befehl und Sie erhalten die relevanten Zeilen geschrieben.