sort — Textzeilen sortieren und deduplizieren
Praxis-Guide zu sort: Textzeilen alphabetisch, numerisch oder nach Version sortieren — mit Schlüsseln, Feldern, Locale und Tuning für große Dateien.
sort ordnet die Zeilen einer Datei oder eines Datenstroms – standardmäßig alphabetisch, auf Wunsch aber auch numerisch, nach Version, nach Monatsnamen oder nach menschenlesbaren Größen wie 2K oder 1G. Über Schlüssel (-k) und einen frei wählbaren Feldtrenner (-t) sortierst du gezielt nach einzelnen Spalten, etwa in CSV-Dateien oder Logs. In Pipelines bildet sort zusammen mit uniq das klassische Duo für Häufigkeitsanalysen. Für riesige Dateien kannst du Speicherpuffer, Temp-Verzeichnis und sogar parallele Verarbeitung steuern. Dieser Guide zeigt dir die Optionen, die du im Alltag wirklich brauchst.
Grundlagen
sort <file> — Zeilen alphabetisch sortieren (Standard: aufsteigend, Groß-/Kleinschreibung beachtend).
sort names.txtsort -r <file> — In umgekehrter (absteigender) Reihenfolge sortieren.
sort -r names.txtsort -o <output> <file> — Ergebnis in eine Datei schreiben. Ein- und Ausgabedatei dürfen identisch sein.
sort -o sorted.txt data.txtsort -u <file> — Sortieren und doppelte Zeilen entfernen (unique).
sort -u emails.txtsort -c <file> — Prüfen, ob eine Datei bereits sortiert ist. Gibt die erste unsortierte Zeile aus und endet mit Fehler.
sort -c data.txtSortiermodi
sort -n <file> — Numerisch statt alphabetisch sortieren.
sort -n scores.txtsort -h <file> — Nach menschenlesbaren Zahlen sortieren (z. B. 2K, 1G, 3M).
du -sh * | sort -hsort -V <file> — Versionsnummern natürlich sortieren (z. B. 1.2 < 1.10).
sort -V versions.txtsort -M <file> — Nach Monatsnamen sortieren (Jan < Feb < Mar ...).
sort -M months.txtsort -R <file> — In zufälliger Reihenfolge sortieren (Zeilen mischen).
sort -R playlist.txtsort -g <file> — Nach allgemeinem Zahlenwert sortieren. Unterstützt wissenschaftliche Notation (z. B. 1.5e3).
sort -g measurements.txtSchlüssel und Felder
sort -k <field> <file> — Nach einem bestimmten Feld sortieren (1-basiert). Standardtrenner ist Whitespace.
sort -k 2 data.txtsort -k <start>,<end> <file> — Nach einem Feldbereich von Anfang bis Ende (inklusive) sortieren.
sort -k 2,2 data.txtsort -t '<sep>' -k <field> <file> — Feldtrenner festlegen und nach einem bestimmten Feld sortieren.
sort -t ',' -k 3 data.csvsort -t ':' -k 3 -n <file> — Nach dem Zahlenwert eines bestimmten Felds mit eigenem Trenner sortieren.
sort -t ':' -k 3 -n /etc/passwdsort -k <field>n <file> — Ein bestimmtes Feld numerisch sortieren. Der Modifikator wird an den Schlüssel angehängt.
sort -k 2n scores.txtsort -k <f1>,<f1> -k <f2>,<f2>n <file> — Nach mehreren Schlüsseln sortieren. Der erste Schlüssel ist primär, der zweite sekundär.
sort -k 1,1 -k 2,2n students.txtGroß-/Kleinschreibung und Locale
sort -f <file> — Klein- in Großbuchstaben falten (Sortierung ohne Beachtung der Groß-/Kleinschreibung).
sort -f mixed-case.txtsort -d <file> — Wörterbuch-Reihenfolge. Nur Leerzeichen und alphanumerische Zeichen berücksichtigen.
sort -d words.txtsort -i <file> — Nicht druckbare Zeichen beim Sortieren ignorieren.
sort -i data.txtLC_ALL=C sort <file> — Nach Byte-Werten sortieren (C-Locale). Schneller und systemübergreifend konsistent.
LC_ALL=C sort large-file.txtLeerzeichen und Stabilität
sort -b <file> — Führende Leerzeichen bei der Schlüsselbestimmung ignorieren.
sort -b indented.txtsort -s <file> — Stabile Sortierung. Erhält die ursprüngliche Reihenfolge von Zeilen mit gleichem Schlüssel.
sort -s -k 1,1 data.txtsort -z <file> — NUL statt Zeilenumbruch als Zeilentrenner verwenden. Nützlich mit find -print0.
find . -print0 | sort -zZusammenführen und große Dateien
sort -m <file1> <file2> — Bereits sortierte Dateien zusammenführen, ohne neu zu sortieren.
sort -m sorted1.txt sorted2.txtsort -S <size> <file> — Eine bestimmte Menge Speicher für den Sortierpuffer verwenden.
sort -S 2G huge-file.txtsort -T <dir> <file> — Ein bestimmtes Verzeichnis für temporäre Dateien statt /tmp verwenden.
sort -T /data/tmp huge-file.txtsort --parallel=<n> <file> — Bis zu N Sortierungen gleichzeitig ausführen (GNU sort).
sort --parallel=4 huge-file.txtPipelines
<command> | sort — Die Ausgabe eines beliebigen Befehls sortieren.
ls -1 | sort<command> | sort -n — Befehlsausgabe numerisch sortieren.
wc -l *.txt | sort -n<command> | sort | uniq -c | sort -rn — Vorkommen zählen und das häufigste zuerst anzeigen.
awk '{print $1}' access.log | sort | uniq -c | sort -rn<command> | sort -u — Ausgabe in einem Schritt sortieren und deduplizieren.
cat file1.txt file2.txt | sort -u<command> | sort -t '<sep>' -k <field> -rn | head -n <count> — Die Top-N-Einträge nach einem numerischen Feld ermitteln.
du -s */ | sort -rn | head -n 10Typische Muster
sort -t ',' -k 2,2 -k 3,3n <file> — CSV nach Spalte 2 (alphabetisch), dann Spalte 3 (numerisch) sortieren.
sort -t ',' -k 2,2 -k 3,3n employees.csvsort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n <file> — IP-Adressen numerisch nach jedem Oktett sortieren.
sort -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n ips.txtsort -rn <file> | head -n 1 — Den größten Zahlenwert in einer Datei finden.
sort -rn numbers.txt | head -n 1sort <file1> <file2> | uniq -d — Gemeinsame Zeilen zweier Dateien finden.
sort users1.txt users2.txt | uniq -dsort <file1> <file2> | uniq -u — Zeilen finden, die nur in einer der beiden Dateien stehen (nicht in beiden).
sort old-list.txt new-list.txt | uniq -utail -n +2 <file> | sort -t ',' -k <field>n — Eine CSV-Datei nach einer numerischen Spalte sortieren, die Kopfzeile überspringen.
tail -n +2 sales.csv | sort -t ',' -k 3n Fazit
sort ist eines der vielseitigsten Textwerkzeuge der Shell und kombiniert sich nahtlos mit uniq, head und cut. Achte auf die Locale: In einer UTF-8-Umgebung sortiert sort anders als mit LC_ALL=C, was zu überraschenden Reihenfolgen und spürbaren Geschwindigkeitsunterschieden führen kann – für reproduzierbare, schnelle Ergebnisse stellst du LC_ALL=C voran. Mit -o kannst du gefahrlos in dieselbe Datei zurückschreiben; ein einfaches > würde die Eingabe dagegen leeren, bevor sort sie liest. Und denk daran: Ein nachgeschaltetes uniq entfernt nur direkt benachbarte Dubletten, weshalb davor fast immer ein sort gehört.
Weiterführende Links
- GNU-Coreutils-Handbuch: sort – vollständige Referenz aller Optionen (englisch)
- Wikipedia: sort (Unix) – Hintergrund und Geschichte des Kommandos