Ich habe eine Textdatei mit folgendem Inhalt:
"random
textA"
"random
random
textB"
Das Trennzeichen ist "
Wie kann ich den Containt mit einem Bash-Befehl wie folgt in mehrere Dateien aufteilen?
Datei 1:
random
textA
Datei 2:
random
random
textB
Ich bin auf Beispiele mit csplit
oder gekommen, awk
aber sie decken dieses Textlayout nicht ab.
bash
text-processing
split
Fabio
quelle
quelle
Antworten:
Einfacher
awk
Befehl:RS
definiert"
als Datensatztrennzeichen undNR
ist die Datensatznummer. Wenn die Datensatznummer Modulo von 2 war (weil wir zuerst eine andere"
für Datensätze haben), drucken Sie den aktuellen Datensatz$0
in aFile #
.quelle
"$
und der nächsten existieren^"
.++i
sondern nur anstelle voni++
.Kann aufawk 'NR%2==0{ print >"File "++i }' RS='"' file
Wenn sich das Eröffnungszitat immer am Anfang der Zeile befindet, funktioniert csplit wie folgt:
Dadurch werden Dateien mit dem Namen xx00 usw. erstellt. Beachten Sie, dass in Ihrem Beispiel die Anführungszeichen entfernt werden und dies nicht der Fall ist. Dazu benötigen Sie eine Befehlszeile:
quelle
coreutils csplit
:csplit -z filesample '/^"/' {*}
um mehr als einmal zu teilen und das erste Stück (xx00
) zu ignorieren, das immer leer ist (für das angegebene Textbeispiel).Mit GNU
awk
quelle
awk -v RS='"' '!/^[[:space:]]*$/ {print > "output." n++; close...}'
Du kannst tun:
quelle