Linux / Befehl sort: Textzeilen sortieren

sort vergleicht die Zeilen einer Eingabedatei und sendet die sortierten Ergebnisse an die Standardausgabe. Es wird nicht nur für alphabetische Sortierung verwendet, sondern auch wenn numerische, feldspezifische oder umgekehrte Sortierung erforderlich ist.

Die Standardsortierung folgt den Zeichenvergleichsregeln der aktuellen Gebietsschemata. Die Originaldatei bleibt unverändert, und nur das Ergebnis wird ausgegeben. Um das Ergebnis zu speichern, leiten Sie es also in eine separate Datei um oder verwenden Sie die GNU -o-Option. Wenn eine reproduzierbare Sortierreihenfolge wichtig ist, geben Sie LC_ALL=C an.

Grundlegende Syntax

sort [option] [file...]

Die installierte Implementierung und die Optionen können je nach Distribution variieren. Überprüfen Sie die Beschreibung für Ihr aktuelles System mit man sort.

Beispiele

Grundlegendes Sortieren

Liest eine Zeile als einzelner Datensatz und sortiert sie. Die Ausgabe ändert die Datei nicht.

sort names.txt

Nach Zahl sortieren

Beim Vergleichen von Zahlen als Zeichen kann 10 vor 2 stehen, daher verwenden Sie -n.

sort -n scores.txt

Basierend auf dem zweiten Feld

Vergleichen Sie das zweite Feld als Zahl in Daten, die durch Leerzeichen getrennt sind. Geeignet für Eingaben mit einer konsistenten Feldstruktur.

sort -k2,2n results.txt

Eingaben anzeigen und Ergebnisse zusammen sortieren

Das folgende Beispiel sortiert drei Zeilen von der Standardeingabe, ohne eine Datei zu erstellen. Die Standardsortierung folgt der Zeichensatzreihenfolge der aktuellen Gebietsschemaeinstellungen, und die Originaldaten bleiben unverändert.

printf 'zebra\napple\nbanana\n' | sort

Beispielausgabe:

apple
banana
zebra

Zeilen, die Zahlen enthalten, werden standardmäßig als Zeichenketten verglichen, sodass 10 vor 2 erscheinen kann. Wenn ein numerischer Vergleich beabsichtigt ist, verwenden Sie sort -n. Um eine Datei zu sortieren und in einer neuen Datei zu speichern, geben Sie den Ausgabepfad wie sort source > result an und leiten Sie nicht direkt in dieselbe Datei um. Die Shell kann die Eingabedatei zuerst leeren.

Beim Sortieren nach mehreren Spalten geben Sie den Bereich jedes Schlüssels explizit an. Verwenden Sie -s, wenn Zeilen mit gleichen Schlüsseln ihre ursprüngliche relative Reihenfolge beibehalten müssen. Die Sortierung ändert sich mit der Gebietsschema-Einstellung, daher setzen Sie eine explizite Umgebung wie LC_ALL=C, wenn ein Skript eine reproduzierbare Reihenfolge benötigt.

Hauptoptionen und Format

Optionen/Format Beschreibung
-n Vergleichen Sie mit numerischen Werten.
-r Die Reihenfolge der Ergebnisse umkehren.
-k start,end Geben Sie das zu vergleichende Schlüsselfeld an.
-u Beim Sortieren nur ein Ergebnis für doppelte Vergleichsschlüssel belassen.
-t delimiter Geben Sie das Feldtrennzeichenzeichen an.

Vorsichtsmaßnahmen bei der Verwendung

sort -u kann Zeilen mit demselben Vergleichsschlüssel auf eine reduzieren, daher seien Sie vorsichtig, wenn andere Felder im Original wichtig sind. Um die ursprüngliche Reihenfolge des Textes beizubehalten und nur benachbarte Duplikate zu entfernen, verwenden Sie uniq. Die Verwendung von > same_file auf der Eingabedatei kann dazu führen, dass die Shell die Datei zuerst leert.

Häufig gestellte Fragen

Wie speichere ich die sortierten Ergebnisse in der Originaldatei?

In GNU sort können Sie sort -o names.txt names.txt verwenden. Stellen Sie sicher, dass Sie wichtige Dateien zuerst sichern.

Offizielle Dokumentation

Sie können das genaue Verhalten der Optionen und implementierungsspezifische Unterschiede in der offiziellen Dokumentation für sort nachlesen.