Der Befehl Sort
Mit dem sort Befehl lässt sich der Inhalt von Dateien unter Linux- beziehungsweise UNIX-Systemen zeilenweise sortieren. Außerdem ist es möglich, die Sortierung von Dateien zu überprüfen und mehrere unsortierte Dateien zu einer sortierten Datei zusammenzuführen.
In diesem Beitrag lernen Sie die grundlegende Funktionalität des sort Befehls, sowie einige der für den alltäglichen Gebrauch wichtigsten Optionen kennen.
Zeilen sortieren mit Sort
Allgemein lautet die Syntax des sort Befehls folgendermaßen:
sort [Optionen] [Dateipfad]
Wenn der Befehl ohne jegliche Optionen auf einer Datei ausgeführt wird, dann werden die Zeilen der Datei ganz einfach lexikographisch sortiert und im Terminal ausgegeben. Die Reihenfolge der Sortierung wird durch das Locale bzw. das System-Gebietsschema beeinflusst.
Es folgt ein kurzes Beispiel.
Beispiel: Sort ohne Optionen
In diesem Beispiel wollen wir die Zeilen einer Textdatei "benutzer.txt" lexikographisch sortieren. Dazu verwenden wir den Befehl sort - zunächst ohne jegliche Optionen.
Vorher (benutzer.txt):
hedv
admin
hellberg
bibo
admina
Eingabe:
sort benutzer.txt
Ausgabe:
admin
admina
bibo
hedv
hellberg
Beispiel: Sort ohne Optionen
Die sortierten Zeilen lassen sich auch direkt in eine Datei schreiben, anstelle sie nur im Terminal auszugeben. Dabei kommt eine sogenannte Umleitung zum Einsatz.
Näheres zu Umleitungen und Pipes finden Sie in unserem Beitrag dazu.
Vorher (benutzer.txt):
berni
admina
hedv
hellberg
bibo
Eingabe:
sort benutzer.txt > benutzer_sortiert.txt
Ausgabe (benutzer_sortiert.txt):
admina
berni
bibo
hedv
hellberg
Die wichtigsten Optionen
Im Folgenden werden einige der wichtigsten Optionen des sort Befehls behandelt.
-b - Leerzeichen am Zeilenanfang ignorieren
Mit der Option -b oder --ignore-leading-blanks können Leerzeichen am Anfang jeder Zeile bei der Sortierung ignoriert werden.
sort -b [Dateipfad]
-f - Groß- und Kleinschreibung ignorieren
Bei der Sortierung wird normalerweise auch die Groß- und Kleinschreibung beachtet. Die Großbuchstaben werden dabei lexikographisch als größer als die Kleinbuchstaben angesehen. Mit der Option -f oder --ignore-case lässt sich dieses Verhalten deaktivieren.
sort -f [Dateipfad]
-d - Nur Leer- und alphanumerische Zeichen berücksichtigen
Die Option -d bzw. --dictionary-order wird verwendet, um bei der Sortierung nur Leerzeichen, sowie alle alphanumerischen Zeichen, also die Buchstaben a-z bzw. A-Z und die Zahlen 0-9 zu berücksichtigen.
sort -n [Dateipfad]
-n - Nach numerischem Wert sortieren
Mit -n bzw. --numeric-sort kann eine Sortierung nur nach dem numerischen Wert einzelner Ziffern (0-9) erfolgen.
sort -n [Dateipfad]
-r - In umgekehrter Reihenfolge sortieren
Über die Option -r bzw. --reverse kann die Reihenfolge der sortierten Zeilen umgekehrt werden.
sort -r [Dateipfad]
-k,-t - Nach Schlüssel / Spalten sortieren
Die Option -k wird verwendet, um eine bestimmte Spalte bzw. einen Token einer Zeichenkette für die Sortierung zu verwenden. Die Zählung der Spalten beginnt mit der 1. Ein sogenannter Delimiter dient dabei als Trennzeichen zwischen den einzelnen Spalten jeder Zeile.
sort -k [Spalte] [Dateipfad]
Der Delimiter ist standardmäßig das Leerzeichen, kann jedoch mit der Option -t auf jedes beliebige Zeichen eingestellt werden. Das angegebene Zeichen wird im Befehl mit Hochkommata ' umfasst.
sort -k [Spalte] -t '[Delimiter]' [Dateipfad]
Beispiel: Sortieren nach Spalten
In diesem Beispiel soll die Datei "gruppen.txt" sortiert werden. Jede Zeile der Datei ist in zwei Spalten bzw. Token aufgeteilt, der Delimiter ist dabei das Leerzeichen. Die erste Spalte wird für die Sortierung verwendet.
Vorher (gruppen.txt):
01 edvberatung-hannover
03 hausverwaltung-isernhagen
02 verwaltung-hannover
04 profi-tutorials
Eingabe:
sort -k 1 gruppen.txt
Ausgabe:
01 edvberatung-hannover
02 verwaltung-hannover
03 hausverwaltung-isernhagen
04 profi-tutorials
Beispiel: Sortieren nach Spalten mit -t
Dieses Beispiel ist dem Vorigen sehr ähnlich, jedoch werden die Spalten hier durch einen senkrechten Strich '|' getrennt. Die Option -t wird verwendet um den Delimiter auf dieses Zeichen festzulegen.
Vorher (gruppen.txt):
01|open-school-it
04|online-kurse
03|miete-hannover
02|it-consulting-hannover
Eingabe:
sort -k 1 -t '|' gruppen.txt
Ausgabe:
01|open-school-it
02|it-consulting-hannover
03|miete-hannover
04|online-kurse
-c - Sortierung überprüfen
Mit -c oder --check können Sie überprüfen, ob eine Datei bereits sortiert ist. Wenn die angegebene Datei nicht sortiert ist, dann wird die erste unsortierte Zeile ausgegeben. Andernfalls gibt es keine Ausgabe.
sort -c [Dateipfad]
Beispiel: Check bei unsortierter Datei 1
Wird -c auf einer unsortierten Datei ausgeführt, dann wird die erste unsortierte Zeile vom Befehl ausgegeben. In diesem Fall ist das die zweite Spalte.
Dateiinhalt (benutzer.txt):
berni
admina
hedv
hellberg
bibo
Eingabe:
sort -c benutzer.txt
Ausgabe:
sort: benutzer.txt:2: ungeordnet: admina
Beispiel: Check bei sortierter Datei
Wenn die mit -c überprüfte Datei bereits sortiert ist, dann gibt der Befehl keine Ausgabe zurück.
Hier ist auch gut zu sehen, dass die Option mit anderen Optionen beliebig kombiniert werden kann, um eine bestimmte Sortierung zu überprüfen.
Dateiinhalt (benutzer_nummeriert.txt):
01 berni
02 admina
03 hedv
04 hellberg
05 bibo
Eingabe:
sort -c -k 1 benutzer_nummeriert.txt
Abonniere JETZT unseren Newsletter!
Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!