Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

sort - Dateien sortieren und/oder mischen

&pagelevel(4)&pagelevel

(sort, merge or sequence check text files)


sort sortiert die Zeilen der Eingabedatei und schreibt das Ergebnis auf die Standard-Ausgabe.

Geben Sie mehrere Eingabedateien an, sortiert und mischt sort die Dateien in einem Arbeitsgang, d.h. der Inhalt aller Eingabedateien wird sortiert ausgegeben.

Sie können entweder nach der ganzen Zeile oder nach bestimmten Zeilenausschnitten sortieren. Ein solcher Zeilenausschnitt heißt Sortierfeld. Wenn Sie nach der ganzen Zeile sortieren wollen, geben Sie keine Sortierfelder an. Wenn Sie nur nach bestimmten Ausschnitten der Zeilen sortieren wollen, geben Sie ein oder mehrere Sortierfelder an. Ein Sortierfeld geben Sie anhand der Felder einer Zeile durch Positionsangaben in der Form +pos1 -pos1 an (siehe Festlegen bestimmter Sortierfelder). Beachten Sie den Unterschied zwischen einem Feld und einem Sortierfeld!

sort teilt die Zeilen einer Datei in Felder ein. Ein Feld ist eine Zeichenkette, die durch ein Feldtrennzeichen oder Neue-Zeile-Zeichen abgegrenzt wird. Standardmäßig sind Leerzeichen und Tabulatorzeichen Feldtrennzeichen. Bei einer Folge von einem oder mehreren Standard-Feldtrennzeichen gehören alle Standard-Feldtrennzeichen zum folgenden Feld. Führende Leerzeichen in einer Zeile gehören somit standardmäßig zum ersten Feld.


Syntax


Format 1: sort [ -m][ -o ausgabe_datei][ -bdfiMnru][ -t zeichen]
     [-k keydef...][ -z recsz][ -y[kmem]]
     [ -T dateiverzeichnis][ datei...]
Format 2: sort -c[ -bdfiMnru][ -t zeichen]
     [-k keydef...][ -z recsz][ -y[kmem]]
     [ -T dateiverzeichnis][ datei...]
Format 3: sort [-m][ -o ausgabe_datei][ -bdfiMnru][ -t zeichen]
     [ +pos1[ -pos2]][ -z recsz][ -y[kmem]]
     [ -T dateiverzeichnis][ datei...]
Format 4: sort -c[ -bdfiMnru][ -t zeichen]
     [ +pos1[ -pos2]][ -z recsz][ -y[kmem]]
     [ -T dateiverzeichnis][ datei...]

Die Formate werden gemeinsam beschrieben, da

  • die Optionen -m und -o ausgabe_datei in Format 1 und 3 gegen die Option -c in Format 2 und 4 ausgetauscht sind

  • die Option -k keydef in Format 1 und 2 gegen die Option +pos1[ -pos2] in Format 3 und 4 ausgetauscht sind.

Keine Option angegeben

sort sortiert die Eingabezeilen lexikographisch, wobei als Einzelzeichen jeweils ein Byte verwendet wird. Für die Bytes gilt die Sortierreihenfolge der Maschine.


Optionen, die das Verhalten von sort ändern

Wollen Sie mehrere dieser Optionen verwenden, müssen Sie diese jeweils einzeln mit Bindestrich und durch Leerzeichen voneinander getrennt angeben.

-c

(c - check)

sort prüft nur, ob die Eingabedatei bereits entsprechend den gültigen Sortierkriterien sortiert ist. Wenn ja, wird nichts ausgegeben. Wenn nein, wird die erste Zeile ausgegeben, die den Sortierkriterien nicht entspricht.

Zusammen mit Option -c dürfen Sie nur eine Datei angeben!

-m

(m - merge)

sort mischt Eingabedateien zusammen, die bereits sortiert sind.

-o ausgabe_datei

(o - output)

Für ausgabe_datei geben Sie den Namen einer Datei an, in die sort den sortierten Inhalt der Eingabedatei schreiben soll. Sie können für ausgabe_datei auch eine Eingabedatei angeben. Deren ursprünglicher, nicht sortierter Inhalt wird dann allerdings überschrieben.

-o ausgabe_datei nicht angegeben:
sort schreibt auf die Standard-Ausgabe.

-T dateiverzeichnis

Temporärdateien werden in dateiverzeichnis angelegt.

-u  

(u - unique)

Identische Zeilen werden nur einmal ausgegeben. Als identische Zeilen zählen Zeilen mit identischen Sortierfeldern.

-y[kmem]

Mit der Option -y legen Sie fest, mit welcher Speicherplatzgröße sort zu sortieren anfängt. Die Ausführungsgeschwindigkeit von sort hängt in hohem Maße von diesem zu Beginn bereitgestellten Speicherplatz ab. Denn es ist eine Verschwendung von Speicherplatz bzw. von Rechenzeit, eine kleine Datei in einem großen Speicher bzw. eine große Datei in einem kleinen Speicher zu sortieren.

kmem

Größe des Speichers in Kbyte, mit dem sort zu sortieren beginnt. Geben Sie für kmem einen Wert an, der über dem oberen Grenzwert von 1 Mbyte bzw. unter dem unteren Grenzwert von 16 Kbyte liegt, wird der entsprechende Grenzwert verwendet. So startet sort z.B. mit dem minimalen Speicherplatz, wenn Sie für kmem den Wert 0 angeben: -y0

kmem nicht angegeben:
sort startet mit dem maximalen Speicherplatz.

-y[kmem] nicht angegeben:
sort startet mit einer Standard-Speichergröße von 32 Kbyte und benützt mehr Speicher, falls mehr benötigt wird.

-z recsz

Mit der Option -z stellen Sie für die Mischphase Puffer von ausreichender Größe bereit. Dies ist nur notwendig, wenn Option -c oder -m gesetzt ist, d.h. wenn nicht sortiert wird:

Wenn sortiert wird, speichert sort die Länge der längsten in der Sortierphase gelesenen Zeile und stellt dadurch für die Mischphase ausreichend große Puffer bereit.

Wenn nicht sortiert wird, verwendet sort für die Puffergröße normalerweise einen Standard-Wert. Zeilen, die länger sind als die reservierte Puffergröße, führen zur abnormalen Beendigung von sort. Dies können Sie verhindern, indem Sie die Länge der längsten zu mischenden Zeile bzw. einen noch größeren Wert in byte für recsz angeben.

Optionen zum Ändern der Sortierkriterien

Die folgenden Optionen können Sie auf zwei Arten angeben:

  • entweder vor der ersten Positionsangabe +pos1:

    Sie gelten dann global für alle mit +pos1 angegebenen Sortierfelder.

    Bei mehreren Optionen werden wie üblich alle einzeln mit Bindestrich und durch Leerzeichen voneinander getrennt oder nur die erste mit Bindestrich und die übrigen direkt ohne Bindestrich und Leerzeichen angehängt angegeben.

  • oder nach einer Positionsangabe +pos1 oder -pos2:

    Sie heben dann für das mit dieser Positionsangabe angesprochene Sortierfeld die globalen Einstellungen auf. D.h. für dieses Sortierfeld gilt die Änderung des Sortierkriteriums gemäß dieser Option.

    Diese Optionen werden ohne Bindestrich und ohne Leerzeichen direkt an +pos1 oder -pos2 angehängt.

-b

sort ignoriert führende Feldtrennzeichen bei der Ermittlung von Anfang und Ende eines Sortierfeldes. Die Option -b ist jedoch nur wirksam, wenn nach Sortierfeldern und nicht nach der ganzen Zeile sortiert wird.

-d

sort sortiert lexikalisch, d.h. nur Zeichen werden berücksichtigt, für die die C-Funktionen isalnum() oder isspace() das Ergebnis „wahr“ zurückliefern. Das sind Zeichen, die in der aktuell gültigen Umgebung als alphanumerische Zeichen oder als Zeichen definiert sind, oder die einen Zwischenraum produzieren, z.B. Leer- oder Tabulatorzeichen.

-f

sort behandelt Groß- und Kleinbuchstaben gleich. Vor dem Sortierverfahren werden Kleinbuchstaben durch Großbuchstaben ersetzt.

-i

Bei nicht numerischen Vergleichen der Sortierfelder werden alle Zeichen, für die die C-Funktion isprint() das Ergebnis „falsch“ zurückliefert, nicht berücksichtigt. Dies sind Zeichen, die in der aktuell gültigen Umgebung als nicht druckbar definiert sind. Liegt für die Sortierreihenfolge z.B. die ASCII-Tabelle zugrunde, werden die Zeichen 001-037 (oktal) einschließlich und das Zeichen 0177 (oktal) nicht berücksichtigt (siehe Tabellen und Verzeichnisse, Zeichensatz ISO 646).

-M

Die ersten drei Zeichen des Sortierfeldes werden in Großbuchstaben verwandelt, als Monatsnamen betrachtet und entsprechend der Reihenfolge der Monate sortiert. Die Option -M impliziert die Option -b.

-n

(n - number)

sort sortiert nach Zahlenwerten. Ein Zahlenwert muss am Anfang des Sortierfeldes stehen und kann bestehen aus: Leerzeichen, Minuszeichen, Ziffern 0-9, Dezimalpunkt. Mit der Option -n wird automatisch die Option -b gesetzt, d.h. führende Leerzeichen werden ignoriert.

-r

(r - reverse)

sort sortiert in umgekehrter Reihenfolge.

Option zum Ändern der Feldtrennzeichen in den Eingabezeilen

Diese Option müssen Sie einzeln mit Bindestrich angeben.

-t zeichen

sort behandelt das Zeichen, das Sie für zeichen angeben, als Feldtrennzeichen. Im Unterschied zu den Standard-Feldtrennzeichen gehört zeichen selbst nicht zu einem Feld. Es kann aber Teil eines Sortierfeldes sein, z.B. wenn das Sortierfeld vom ersten bis dritten jeweils durch zeichen getrennten Feld reicht. Jedes Trennzeichen zeichen ist signifikant, d.h. zeichenzeichen begrenzt ein leeres Feld.

-t zeichen nicht angegeben:
Es gelten die Standard-Feldtrennzeichen: Leer- und Tabulatorzeichen. Eine Folge von einem oder mehreren Standard-Feldtrennzeichen gehört zum nachfolgenden Feld.

Festlegen bestimmter Sortierfelder

Beachten Sie bei der Angabe von Sortierfeldern, dass Buchstabenfolgen, die in der aktuell gültigen Umgebung als Zeicheneinheit definiert sind, als ein Buchstabe zählen. In einer spanischen Umgebung wäre z.B. ch eine Zeicheneinheit.

-k keydef

Festlegen der Sortierfelder. keydef ist als Sortierfeld in der folgenden Form definiert:

Anfang_des_Sortierfeldes[typ][,Ende_des_Sortierfeldes[typ]]

wobei Anfang_des_Sortierfeldes +pos1 entspricht und Ende_des_Sortierfeldes -pos2 (siehe nachfolgende Beschreibung). typ entspricht einer der Optionen b, d, f, i, n oder r.

+pos1[ - pos2]

Mit +pos1 -pos2 bestimmen Sie anhand der Felder der Eingabezeilen Anfang und Ende eines Sortierfeldes.

+pos1 legt die Position des ersten Zeichens im Sortierfeld,
-pos2 legt die Position des ersten Zeichens nach dem Sortierfeld fest. +pos1 muss vor-pos2 stehen.

-pos2 nicht angegeben:
Das Sortierfeld geht von +pos1 bis zum Zeilenende.

Die Argumente pos1 und pos2 haben das Format:

m[.n]

m und n sind ganze Zahlen, die folgende Bedeutung haben:

m

m Felder der Zeile überspringen. Angesprochen ist also Feld m+1.

.n

n Zeichen einschließlich Feldtrennzeichen nach dem letzten Zeichen von Feld m überspringen. Angesprochen ist also Zeichen n+1 im Feld m+1. Ist Option -b angegeben, zählen Feldtrennzeichen am Feldanfang nicht mit, +m.nb spricht also das n+1te Nicht-Trennzeichen nach dem Feld m an.

.n nicht angegeben:
Dies ist mit .0 gleichbedeutend und spricht also das erste Zeichen nach dem Feld m an. Ist Option -b angegeben, zählen Feldtrennzeichen am Feldanfang nicht mit, +m.0b spricht also das erste Nicht-Trennzeichen nach dem Feld m an.

Beispiel

Das Sortierfeld beginnt im zweiten Feld beim vierten Zeichen und endet mit diesem Feld. Sie geben das Sortierfeld so an:

sort +1.3 -2

Erläuterung:


     Ende        Ende    Ende
     Feld1       Feld2   Feld3
         |           |       |
030-456537 A.Meierlein München
             |       |
             Sortierfeld


+1.3

Feld 1 und 3 Zeichen überspringen:
das 4. Zeichen nach Feld 1 ist das 1. Zeichen im Sortierfeld: M

-2

Feld 2 und 0 Zeichen überspringen:
das 1. Zeichen nach Feld 2 ist das 1. Zeichen nach dem Sortierfeld: Leerzeichen. Das Zeichen davor ist also das letzte Zeichen im Sortierfeld: n

Beachten Sie, dass Standard-Feldtrennzeichen, anders als ein mit Option -t definiertes Feldtrennzeichen, zum nachfolgenden Feld gehören. Das 1. Zeichen von Feld 2 ist somit das Leerzeichen, das 2. Zeichen das A usw.

Gibt es mehrere Sortierfelder, so sortiert sort zunächst nach dem ersten, bei Gleichheit im ersten Sortierfeld nach dem nächsten usw.

datei

Name der Datei, die Sie sortieren möchten.
Sie können mehrere Dateien angeben. Alle angegebenen Dateien werden sortiert und zusammengemischt, so dass die Eingabezeilen aus allen Dateien sortiert auf die Standard-Ausgabe ausgegeben werden. In der Eingabedatei zählen alle Buchstabenfolgen als ein Buchstabe, die in der aktuell gültigen Umgebung als Zeicheneinheit definiert sind. In einer spanischen Umgebung wäre z.B. ch eine Zeicheneinheit. Fehlt in der letzten Zeile einer Datei datei ein Neue-Zeile-Zeichen, so fügt sort es ein, gibt eine Warnung aus und setzt die Bearbeitung fort.

Zusammen mit Option -c dürfen Sie nur eine Datei angeben!

Wenn Sie für datei einen Bindestrich - angeben, liest sort von der Standard-Eingabe.

datei nicht angegeben:
sort liest von der Standard-Eingabe.

Endestatus

Folgende Endewerte können auftreten:

0

alle Eingabedateien wurden erfolgreich bearbeitet. War -c gesetzt, dann wurde die Eingabedatei korrekt sortiert.

1War -c gesetzt, wurde die Eingabedatei nicht wie angegeben sortiert. War sowohl -c als auch -u gesetzt, wurden zwei identische Eingabezeilen mit gleichem Sortierfeld gefunden.
>1Ein Fehler ist aufgetreten.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos sort:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_COLLATE

Bestimmt die gültige Sortierrreihenfolge, nach der sort die Eingabe sortiert.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten) sowie für die Optionen -b, -d, -f und -i die Zeichenklassifizierung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

LC_NUMERIC

Bestimmt für die Option -n die gültige Darstellung des Dezimalpunkts.

LC_TIME

Bestimmt für die Option -M die aktuell gültigen Monatsnamen und ihre Abkürzung und beeinflusst ihre Sortierreihenfolge.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel 1

Der Inhalt von eingabe_datei soll nach dem zweiten Feld sortiert werden.

$ sort +1 -2 eingabe_datei

Beispiel 2

Der Inhalt von eingabe_datei1 und eingabe_datei2 soll in umgekehrter Reihenfolge nach dem zweiten Zeichen im zweiten Feld (= 1. Nicht-Leerzeichen bei vorausgesetzter Feldtrennung durch jeweils 1 Leerzeichen) sortiert werden; die Ausgabe soll in ausgabe_datei geschrieben werden.

$ sort -r -o ausgabe_datei +1.0 -1.2 eingabe_datei1 eingabe_datei2

Beispiel 3

Der Inhalt von eingabe_datei1 und eingabe_datei2 soll in umgekehrter Reihenfolge nach dem ersten Nicht-Leerzeichen im zweiten Feld sortiert werden.

$ sort -r -o ausgabe_datei +1.0b -1.1b eingabe_datei1 eingabe_datei2

Beispiel 4

Die bereits sortierte Datei eingabe_datei soll ausgegeben werden. Dabei soll von mehreren Zeilen, bei denen das dritte Feld übereinstimmt, jeweils nur die erste Zeile ausgegeben werden.

$ sort -u +2 -3 eingabe_datei

Siehe auch

comm, join, uniq