Der Befehl Sort

SD-karte-1

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!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: