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.txt

sort -r <file> — In umgekehrter (absteigender) Reihenfolge sortieren.

sort -r names.txt

sort -o <output> <file> — Ergebnis in eine Datei schreiben. Ein- und Ausgabedatei dürfen identisch sein.

sort -o sorted.txt data.txt

sort -u <file> — Sortieren und doppelte Zeilen entfernen (unique).

sort -u emails.txt

sort -c <file> — Prüfen, ob eine Datei bereits sortiert ist. Gibt die erste unsortierte Zeile aus und endet mit Fehler.

sort -c data.txt

Sortiermodi

sort -n <file> — Numerisch statt alphabetisch sortieren.

sort -n scores.txt

sort -h <file> — Nach menschenlesbaren Zahlen sortieren (z. B. 2K, 1G, 3M).

du -sh * | sort -h

sort -V <file> — Versionsnummern natürlich sortieren (z. B. 1.2 < 1.10).

sort -V versions.txt

sort -M <file> — Nach Monatsnamen sortieren (Jan < Feb < Mar ...).

sort -M months.txt

sort -R <file> — In zufälliger Reihenfolge sortieren (Zeilen mischen).

sort -R playlist.txt

sort -g <file> — Nach allgemeinem Zahlenwert sortieren. Unterstützt wissenschaftliche Notation (z. B. 1.5e3).

sort -g measurements.txt

Schlüssel und Felder

sort -k <field> <file> — Nach einem bestimmten Feld sortieren (1-basiert). Standardtrenner ist Whitespace.

sort -k 2 data.txt

sort -k <start>,<end> <file> — Nach einem Feldbereich von Anfang bis Ende (inklusive) sortieren.

sort -k 2,2 data.txt

sort -t '<sep>' -k <field> <file> — Feldtrenner festlegen und nach einem bestimmten Feld sortieren.

sort -t ',' -k 3 data.csv

sort -t ':' -k 3 -n <file> — Nach dem Zahlenwert eines bestimmten Felds mit eigenem Trenner sortieren.

sort -t ':' -k 3 -n /etc/passwd

sort -k <field>n <file> — Ein bestimmtes Feld numerisch sortieren. Der Modifikator wird an den Schlüssel angehängt.

sort -k 2n scores.txt

sort -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.txt

Groß-/Kleinschreibung und Locale

sort -f <file> — Klein- in Großbuchstaben falten (Sortierung ohne Beachtung der Groß-/Kleinschreibung).

sort -f mixed-case.txt

sort -d <file> — Wörterbuch-Reihenfolge. Nur Leerzeichen und alphanumerische Zeichen berücksichtigen.

sort -d words.txt

sort -i <file> — Nicht druckbare Zeichen beim Sortieren ignorieren.

sort -i data.txt

LC_ALL=C sort <file> — Nach Byte-Werten sortieren (C-Locale). Schneller und systemübergreifend konsistent.

LC_ALL=C sort large-file.txt

Leerzeichen und Stabilität

sort -b <file> — Führende Leerzeichen bei der Schlüsselbestimmung ignorieren.

sort -b indented.txt

sort -s <file> — Stabile Sortierung. Erhält die ursprüngliche Reihenfolge von Zeilen mit gleichem Schlüssel.

sort -s -k 1,1 data.txt

sort -z <file> — NUL statt Zeilenumbruch als Zeilentrenner verwenden. Nützlich mit find -print0.

find . -print0 | sort -z

Zusammenführen und große Dateien

sort -m <file1> <file2> — Bereits sortierte Dateien zusammenführen, ohne neu zu sortieren.

sort -m sorted1.txt sorted2.txt

sort -S <size> <file> — Eine bestimmte Menge Speicher für den Sortierpuffer verwenden.

sort -S 2G huge-file.txt

sort -T <dir> <file> — Ein bestimmtes Verzeichnis für temporäre Dateien statt /tmp verwenden.

sort -T /data/tmp huge-file.txt

sort --parallel=<n> <file> — Bis zu N Sortierungen gleichzeitig ausführen (GNU sort).

sort --parallel=4 huge-file.txt

Pipelines

<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 10

Typische 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.csv

sort -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.txt

sort -rn <file> | head -n 1 — Den größten Zahlenwert in einer Datei finden.

sort -rn numbers.txt | head -n 1

sort <file1> <file2> | uniq -d — Gemeinsame Zeilen zweier Dateien finden.

sort users1.txt users2.txt | uniq -d

sort <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 -u

tail -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.

Verwandte Kommandos

  • uniq – benachbarte doppelte Zeilen filtern und zählen
  • wc – Zeilen, Wörter und Bytes zählen
  • cut – Spalten und Felder aus Zeilen ausschneiden