Dateien an regulären Ausdrücken ausplitten (Permalink)

Manche Dateien sind besser auswertbar, wenn man statt einer monolithischen Riesendatei mehrere bzw. viele kleine Dateien hat. Beispielsweise eine Log-Datei der MySQL (slow log). Wichtig sind für unser Beispiel wiederkehrende Zeilen wie z.B.:

# Time: 101128 13:30:31

Nach einer solchen Zeile stehen dann weitere Metadaten zu den folgenden Abfragen und die Abfrage an sich.

Will man nun anhand dieser Zeilen trennen, baut man sich zunächst einen passenden regulären Ausdruck, in unserem Beispiel genügt:

/#\ Time/

Anschließend wird mit dem Auruf

csplit -s slow.log /#\ Time/ {*}

die Datei slow.log in beliebig viele Dateien aufgeteilt (siehe {*}) und dabei nicht ausgegeben, wie groß die erzeugten Dateien sind (siehe -s). Die Ergebnisdateien heißen dabei 'xx[0-9]*'.

Weitere mögliche Parameter finden sich in der Man-Page zu csplit.