Aufteilen und Komprimieren von Dateien in der Pipeline

443
Jay

Ich habe also so eine massive Datei ...

1/20/2016,somerandomdata 1/20/2016,somerandomdata 1/20/2016,somerandomdata 1/20/2016,somerandomdata 1/21/2016,somerandomdata 1/21/2016,somerandomdata 1/21/2016,somerandomdata 1/21/2016,somerandomdata 1/22/2016,somerandomdata 1/22/2016,somerandomdata 1/22/2016,somerandomdata 1/22/2016,somerandomdata 

Ich möchte es in eine Reihe kleinerer Dateien aufteilen, die auf der ersten Spalte basieren. Einfach: Verwenden Sie awk so:

awk -F '[,/]' '' 

Hier ist der Haken: Ich möchte, dass die Ausgabedateien komprimiert werden. Ich könnte also weitermachen und das nach der Tatsache tun ...

find . -name "filename*.dat" | xargs -l xz 

Das Problem dabei ist, dass ich möchte, dass xz in der Pipeline ist, anstatt nach dem Aufteilen der Daten. Etwas wie das:

curl "url" | grep "blah" | xz -c > filename.dat.xz 

Natürlich wird die Datei dadurch nicht aufgeteilt.

Der Grund, warum ich es in der Pipeline haben möchte, ist, dass ich die Daten herunterlade und die Komprimierung gleichzeitig mit dem Herunterladen anstatt nachher ausführen möchte. (Ich bin mir ziemlich sicher, dass das alles schneller laufen würde, aber wenn ich falsch liege, korrigiere mich.)

Mein Ziel ist also so etwas wie ....

curl "url" | grep "blah" | awk -F '[,/]' '' | xz -c > filename.dat.xz 

Aber nicht, weil das offensichtlich nicht funktionieren wird

Wenn Sie eine bessere Lösung für mein Problem haben oder glauben, ich mache etwas völlig Dummes, bin ich flexibel.

3
und Sie möchten, dass alle Ausgabedateien wieder in eine Datei komprimiert werden? Ich bezweifle, dass dies in der Pipeline möglich ist. gogoud vor 8 Jahren 0
Ich möchte, dass jede Datei einzeln in separate Dateien komprimiert wird Jay vor 8 Jahren 0
Ich denke, awk kann selbst Pfeifen machen, siehe dieses A für Inspiration http://superuser.com/a/485602/307834 Xen2050 vor 8 Jahren 1

1 Antwort auf die Frage

2
Xen2050

awk can do pipes "natively" itself, just like the redirections in the example. I'm not an awk quoting expert, but this matches your example & is reported to work A-OK:

awk -F '[,/]' '' 
Nein, funktioniert nicht ... `cat exfile | grep "$ Dates" | awk -F '[, /]' '' `arbeitet und gibt mehrere unkomprimierte Dateien aus, aber` cat exfile | grep "$ Dates" | awk -F '[, /]' ' '`gibt den` Syntaxfehler` am `>` aus Jay vor 8 Jahren 0
Ah, aber `awk -F '[, /]' ' '`funktioniert. Jay vor 8 Jahren 0
Wenn Sie Ihre Antwort aktualisieren, werde ich sie als korrekt markieren Jay vor 8 Jahren 0