So verketten Sie zwei Dateien zu einer neuen und sortieren die Ausgabe in einer Zeile

So verketten Sie zwei Dateien zu einer neuen und sortieren die Ausgabe in einer Zeile

Ich habe zwei Dateien mit einigen Namen darin. Beim Ausführen cat file1 file2 | sortzeigt das Terminal die Namen alphabetisch sortiert an, beim Ausführen cat file1 file2 > file3 | sortsehe ich jedoch nicht die sortierte Ausgabe. Warum?

Antwort1

Sie haben die Ausgabe von file1und bereits file2in die neue Datei umgeleitet file3.

Mit diesem Befehl cat file1 file2 > file3 | sortnach sortPipe.

Dies kann wie folgt überprüft werden.

cat file1
A
Z
B
cat file2
F
G
C

Wenn ich den Befehl jetzt als ausführe, cat file1 file2 > file3 | sortkönnen wir sehen, dass der Inhalt von file1und file2geschrieben wird file3, aber nicht sortiert ist.

Ich glaube, dass das, was Sie erreichen möchten, ziemlich einfach erreicht werden könnte, indem

cat file1 file2 | sort > file3

Die Ausgabe wird jedoch nicht im Konsolenfenster angezeigt.

Wenn die Ausgabe von zwei Dateien nach dem Sortieren in eine neue Datei geschrieben werden soll und die sortierte Ausgabe gleichzeitig in der Konsole verfügbar sein soll, können Sie wie folgt vorgehen.

cat file1 file2 | sort > file3; cat file3

teeEs ist jedoch gut, in diesem Fall davon Gebrauch zu machen . teekönnte effektiv verwendet werden als,

cat file1 file2 | sort | tee file3

Der obige Befehl verkettet grundsätzlich zwei Dateien, sortiert sie, zeigt die Ausgabe in der Konsole an und schreibt gleichzeitig die Ausgabe der Pipe in die mit dem teeBefehl angegebene neue Datei.

Als BenutzerCaseyweist darauf hin, dass zshSie auch den folgenden Befehl verwenden können, wenn auf Ihrem System eine Shell verfügbar ist.

sort <file1 <file2 | tee file3

Antwort2

POSIX definiert den sortZweck des Dienstprogramms wie folgt:

Sortiert die Zeilen aller benannten Dateien gemeinsam und schreibt das Ergebnis in die angegebene Ausgabe.

Sie können zwei Dateien in eine verbundene Ausgabedatei sortieren, wie:

sort $opts file1 file2 >output_file

Wenn Sie die Ausgabe auf Ihrer Shell sehen möchtenstdout UndSpeichern Sie die Ergebnisse in einer Ausgabedatei und verwenden Sie dann tee:

sort $opts file[12] | tee output_file

verwandte Informationen