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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top