Wie verteilen Sie eine Datei Basis auf einem Token?
-
08-07-2019 - |
Frage
Angenommen, Sie haben eine Datei bekam Texte, die (von 1 bis N) durch ein $ getrennt Wie kann ein Schlitz die Datei so das Endergebnis ist, N-Dateien?
text1 mit Zeilenumbrüchen $
text2 $ etc ... $
textN
Ich bin etwas mit awk oder sed denke aber gibt es keine verfügbare Unix-Anwendung, die bereits diese Art von Aufgabe durchführen?
Lösung
Vielleicht split -p
Muster
Hmm. Das mag nicht genau, was Sie wollen. Es spaltet keine Linie, es beginnt nur eine neue Datei, wenn sie das Muster sieht. Und es scheint, nur auf BSD bezogenen Systemen unterstützt werden.
könnten Sie so etwas wie:
awk 'BEGIN {RS = "$"} { ... }'
Bearbeiten Sie könnten Inspiration für den { ... }
Teil finden Sie hier:
http://www.gnu.org/manual/gawk /html_node/Split-Program.html
bearbeiten. Dank von Dmckee kommentieren, aber csplit
scheint auch die ganze Zeile zu kopieren, auf das das Muster auftritt
Andere Tipps
awk ‚BEGIN {RS = "$"; ORS = ""} {textNumber ++; print $ 0> "Text" textNumber ".out"}‘filename
Dank an Bill Karwin für die Idee.
Edit: Fügen Sie den ORS = „“ zu vermeiden, am Ende jeder Datei eine neue Zeile Druck
.Wenn ich dieses Recht habe zu lesen, die UNIX schneiden Befehl sein zum Einsatz.
cut -d $ -f 1- filename
Ich könnte die Syntax etwas weg, aber das sollte geschnitten sagen, dass Sie $ getrennte Felder verwenden und die Felder 1 bis zum Ende zurück.
Sie müssen möglicherweise die $ entkommen.
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
Split-Befehl können wir mit Strings aufgeteilt.
aber csplit Befehl ermöglicht es Ihnen, Dateien basieren auf regulären Ausdrücken als auch aufzuschlitzen.