Wie kann ich den Befehl stdout in Abschnitte aufteilen, einen für jede Datei?

Wie kann ich den Befehl stdout in Abschnitte aufteilen, einen für jede Datei?

Wenn ein Linux-Befehl mehrere Dateien als Eingabe erhält. Gibt es einen Befehl/Trick, um Befehle stdoutin Abschnitte aufzuteilen? Einen für jede Datei? So wird optisch klar, welche Zeilen zu welcher Datei gehören?

Wenn beispielsweise Befehle wie cat, grep, sed, sort, tail, mehrere Dateien als Eingabe erhalten. Normalerweise drucken sie ihre Ergebnisse kontinuierlich auf stdout, aber ich möchte das Ergebnis in Abschnitte aufteilen. Einen für jede der Eingabedateien

Ich möchte das Ergebnis NICHT in Dateien aufteilen oder nach der Anzahl der Zeilen aufteilen, wie es indiese Frage. Das, was dem am nächsten kommt, ist die Verwendung, find -print -exec commandwie es erklärt wirdHier. Aber immer noch nicht ganz das, was ich wollte.

Angenommen, mein Befehl funktioniert mit file1, file2, und file3als Eingabe und druckt Folgendes:

line1 of file1
line2 of file1
line3 of file1
line1 of file2
line2 of file2
line3 of file2
line1 of file3
line2 of file3
line3 of file3

Ich möchte, dass die Ausgabe ungefähr wie folgt formatiert ist, sodass ich zur nächsten Datei springen kann, wenn ich in einer Datei das gesuchte Objekt gefunden habe:

>>> file1 <<<
line1 of file1
line2 of file1
line3 of file1

----------------
>>> file2 <<<
line1 of file2
line2 of file2
line3 of file2

----------------
>>> file3 <<<
line1 of file3
line2 of file3
line3 of file3

Dank im Voraus.

Antwort1

Wenn Ihnen die Reihenfolge der Zeilen egal ist, außer dass sie nach Datei sortiert werden sollen, können Sie dies mit „sort“ tun, indem Sie jeder Zeile z. B. die ID voranstellen.

file1: line1
file2: line1
file1: line2

Anschließend können Sie das Ergebnis durch Sortieren weiterleiten:

$ ( process-file1 & process-file2 & ); wait | sort
file1: line1
file1: line2
file2: line1

Natürlich können Sie bei dieser Vorgehensweise auch Zeilennummern hinzufügen – verwenden Sie dann einfach „sort -n“.

Um es in das gewünschte Format zu verarbeiten, können Sie mit awk ein Skript erstellen, um den vorderen Teil zu entfernen und in eine Überschrift umzuwandeln.

verwandte Informationen