Abgesehen von der Verwendung einer echten XML-Bibliothek und / oder awk / perl / python / ruby entspricht dies ziemlich genau dem, was Sie wollen (wenn ich Sie richtig verstanden habe), indem Sie nur allgemeine Bash-Befehle verwenden.
Bitte beachten Sie, dass dies wirklich spezifisch für verwendete XML-Dateien ist und nicht als allgemeiner XML-Parser / Splitter empfohlen werden sollte.
Sie benötigen ein Ausgabeverzeichnis für die aufgeteilten Dateien. Ich habe / tmp / out für dieses Beispiel verwendet:
mkdir -p /tmp/out
Sie müssen /tmp/out
vor jedem Lauf reinigen . Andernfalls erhalten Sie Ergebnisse, die keinen Sinn ergeben.
cat /path_to_xml_files/*.xml | \
egrep -v '<?xml version="1.0" \?>|<queries>|</queries>' | \
csplit -q -z - '/statement name/' '{*}' --prefix=/tmp/out/splitout- && \
for x in /tmp/out/splitout-* ; do \
[[ $(wc -l "$x"|cut -d" " -f 1) -gt 10 ]] && \
echo "$x" && \
cat "$x" ; \
done
- Katze die XML-Dateien
- Verwenden Sie egrep, um unerwünschte Linien zu entfernen
- Eingabe auf mehrere Dateien aufteilen, basierend auf Ihrem Beispiel "Anweisungsname"
- Schleifenergebnisse
- Zählen Sie die Zeilen für jede Datei und fordern Sie mehr als 10
- Ausgabedateiname drucken
- Ausgabezeilen drucken
Wie ich bereits sagte, ist dies kein allgemeiner XML-Splitter, sondern ein Beispiel für verschiedene Shell-Befehle.
Hinweis: '\'
-Zeichen gefolgt von Zeilenumbruch bedeutet, dass die Zeile ohne Zeilenumbrüche fortgesetzt wird. Dies erleichtert nur das Lesen.