Ich habe Programm (gawk), das Datenstrom an seinen STDOUT ausgibt. Die verarbeiteten Daten sind buchstäblich 10 GB GB. Ich möchte es nicht in einer einzigen Datei persistieren, sondern es in Stücke teilen und möglicherweise einige zusätzliche Verarbeitung (wie die Komprimierung) auf jeden vor dem Speichern anwenden.STDIN in mehrere Dateien aufteilen (und wenn möglich komprimieren)
meine Daten sind eine Folge von Datensätzen, und ich möchte Splitting nicht in zwei Hälften schneiden. Jeder Datensatz entspricht den folgenden regulären Ausdruck:
^\{index.+?\}\}\n\{.+?\}$
oder die Einfachheit halber kann davon ausgehen, dass zwei Reihen (ersten uneben dann auch, wenn sie von Anfang der Streams Nummerierung) immer einen Datensatz machen.
Kann ich:
- Verwendung einige Standard-Linux-Befehl zu spalten STDIN durch bevorzugte Größe von chunk definieren? Muss nicht genau angegeben werden, da die Größe der Datensatzvariablen dies nicht garantieren kann. Alternativ nur Anzahl der Datensätze, falls def. nach Größe
- Kompresse jeder Chunk und speichern Sie in einer Datei nicht möglich ist (mit einiger Nummerierung in seinem Namen wie 001, 002 etc ..)
Ich habe wurde von Befehlen wie GNU parallel oder csplit
aber don bewusst‘ Ich weiß, wie man es zusammenstellt. Wäre nett, wenn die oben beschriebene Funktionalität erreicht würde, ohne dafür ein eigenes Perl-Skript zu schreiben. Dies könnte jedoch eine andere, letzte Lösung sein, aber wiederum nicht sicher, wie man es am besten implementiert.
Gibt es einen Grund, warum Sie 'split -l' nicht mit einer geraden Zahl für den Parameter' -l' verwenden können? Siehe: [Mann geteilt] (http://linux.die.net/man/1/split) –
@PaulR gibt es - ich müsste zuerst den gesamten Datenstrom als eine physische Datei auf der Festplatte instanziieren. – msciwoj