sort(1) sort(1)
NAME
sort - Dateien sortieren und/oder mischen
SYNTAX
sort [option ...] [datei ...]
BESCHREIBUNG
sort sortiert die Zeilen der Eingabedatei und schreibt das Ergebnis
auf die Standardausgabe.
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 Zeilen-
ausschnitten sortieren. Ein solcher Zeilenausschnitt heißt Sortier-
feld. 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 Positionsan-
gaben in der Form +pos1 -pos1 an (siehe Festlegen bestimmter Sortier-
felder). 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.
OPTIONEN
Keine Option angegeben:
sort sortiert die Eingabezeilen lexikographisch, wobei als Ein-
zelzeichen jeweils ein Byte verwendet wird. Für die Zeichen gilt
die Sortierreihenfolge die durch LCCOLLATE definiert wird.
Optionen, die das Verhalten von sort ändern
-c (c - check) sort prüft nur, ob die Eingabedatei bereits entspre-
chend 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! Die
Optionen -m und -o dürfen nicht zusammen mit -c verwendet werden.
Zusammen mit -u: sort prüft zusätzlich, ob Zeilen mit identischen
Sortierfeldern vorhanden sind.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
-m (m - merge) sort mischt Eingabedateien zusammen, die bereits sor-
tiert sind.
-m darf nicht zusammen mit -c verwendet werden.
-o ausgabedatei
(o - output) Für ausgabedatei geben Sie den Namen einer Datei
an, in die sort den sortierten Inhalt der Eingabedatei schreiben
soll. Sie können für ausgabedatei auch eine Eingabedatei ange-
ben. Deren ursprünglicher, nicht sortierter Inhalt wird dann
allerdings überschrieben.
Sie dürfen nur eine einzige Option -o angeben. -o darf nicht
zusammen mit -c verwendet werden.
-o ausgabedatei nicht angegeben: sort schreibt auf die Standard-
ausgabe.
-T verzeichnis
Temporärdateien werden in verzeichnis angelegt.
-T nicht angegeben: Temporärdateien werden in /var/tmp 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 Speicher-
platz bzw. von Rechenzeit, eine kleine Datei in einem großen
Speicher bzw. eine große Datei in einem kleinen Speicher zu sor-
tieren.
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 Grenz-
wert von 16 Kbyte liegt, wird der entsprechende Grenzwert
verwendet. So startet sort z. B. mit dem minimalen Spei-
cherplatz, wenn Sie für kmem den Wert 0 angeben: -y0
kmem nicht angegeben: sort startet mit dem maximalen Spei-
cherplatz.
-y [kmem] nicht angegeben:
sort startet mit einer Standard-Speichergröße von 32 Kbyte und
benützt mehr Speicher, falls mehr benötigt wird.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
-z recsz
Mit der Option -z stellen Sie für die Mischphase Puffer von aus-
reichender 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 Misch-
phase ausreichend große Puffer bereit.
Wenn nicht sortiert wird, verwendet sort für die Puffergröße nor-
malerweise einen Standardwert. 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äng-
sten 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 auf zwei Arten verwendet werden:
- entweder als Optionen vor der ersten Positionsangabe:
Sie gelten dann global für alle nachfolgenden Sortierfelder. Bei
Verwendung von -k müssen die Optionen vor der ersten Angabe von -k
stehen; bei +pos bzw. -pos können die Optionen auch zwischen den
einzelnen Positionsangeben stehen und gelten dann nur für die nach-
folgenden Sortierfelder.
- oder als Modifikatoren für einzelne Sortierfelder:
Sie heben dann für das angesprochene Sortierfeld die globalen Ein-
stellungen auf. D. h. für dieses Sortierfeld gilt nur die Änderung
des Sortierkriteriums entsprechend der angegebenen Modifikation.
Als Modifikatoren werden die Optionsbuchstaben ohne Bindestrich und
ohne Leerzeichen direkt an die Feldangabe angehängt (siehe Festle-
gen bestimmter Sortierfelder).
-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ücksich-
tigt, für die die C-Funktionen isalnum(3C) oder isspace(3C) das
Ergebnis "wahr" zurückliefern. Das sind Zeichen, die in der aktu-
ell gültigen Umgebung als alphanumerische Zeichen oder als Zei-
chen definiert sind, oder die einen Zwischenraum produzieren,
z. B. Leer- oder Tabulatorzeichen.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
-f sort behandelt Groß- und Kleinbuchstaben gleich. Vor dem Sortier-
verfahren werden Kleinbuchstaben durch Großbuchstaben ersetzt.
-i Bei nicht numerischen Vergleichen der Sortierfelder werden alle
Zeichen, für die die C-Funktion isprint(3C) 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 ascii(5)].
-M Die ersten drei Zeichen des Sortierfeldes werden in Großbuchsta-
ben verwandelt, als Monatsnamen betrachtet und entsprechend der
Reihenfolge der Monate sortiert. Die Option -M impliziert die
Option -b.
-n (n - number) sort sortiert (numerisch) nach Zahlenwerten. Ein
Zahlenwert muß am Anfang des Sortierfeldes stehen und kann beste-
hen 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
-t x sort behandelt das Zeichen, das Sie für x angeben, als Feldtrenn-
zeichen. Im Unterschied zu den Standard-Feldtrennzeichen gehört x
selbst nicht zu einem Feld. Es kann aber Teil eines Sortierfeldes
sein, z. B. wenn das Sortierfeld vom ersten bis dritten jeweils
durch x getrennten Feld reicht. Jedes Trennzeichen x ist signifi-
kant, d. h. xx begrenzt ein leeres Feld.
-t nicht angegeben:
Es gelten die Standard-Feldtrennzeichen: Leer- und Tabulatorzei-
chen. Eine Folge von einem oder mehreren Standard-Feldtrennzei-
chen gehört zum nachfolgenden Feld.
Festlegen bestimmter Sortierfelder
Beachten Sie bei der Angabe von Sortierfeldern, daß 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.
Die Angabe von Sortierfeldern mit neuer Syntax -k feldbeschreibung
oder alter Syntax +pos1 bzw. -pos2 ist gleichbedeutend, darf aber
nicht gemischt werden. Die Umstellung auf neue Syntax wird empfohlen.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
Sie können mehrere Sortierfelder angeben. Gibt es mehrere Sortierfel-
der, so sortiert sort zunächst nach dem ersten, bei Gleichheit im
ersten Sortierfeld nach dem nächsten usw.
-k feldbeschreibung
Mit -k bestimmen Sie Anfang und Ende eines Sortierfeldes. In
feldbeschreibung legen Sie dazu das erste und das letzte Zeichen
des Sortierfeldes fest.
feldbeschreibung hat folgendes Format:
startfeld[typ][,endfeld[typ]]
wobei für startfeld und endfeld die Nummer des Feldes und eines
Zeichens im Feld angegeben werden kann:
m[.n]
m und n sind ganze Zahlen, die folgende Bedeutung haben:
m m gibt die Nummer des ersten bzw. letzten Feldes an.
.n n gibt die Nummer des ersten verwendeten Zeichens im ersten
Feld an bzw. die Nummer des letzten verwendeten Zeichens im
letzten Feld.
n nicht angegeben:
Das Feld wird vom ersten Zeichen an bzw. bis zum letzten
Zeichen verwendet.
typ Modifiziert das Sortierfeld (siehe Optionen zum Ändern der
Sortierkriterien).
+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 muß vor -pos2 stehen.
-pos2 nicht angegeben:
Das Sortierfeld geht von +pos1 bis zum Zeilenende.
Die Argumente pos1 und pos2 haben das Format:
m[.n][typ]
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
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 Zei-
chen n+1 im Feld m+1. Ist Option -b angegeben, zählen Feld-
trennzeichen 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.
typ Modifiziert das Sortierfeld (siehe Optionen zum Ändern der
Sortierkriterien).
Beispiel:
Das Sortierfeld beginnt im zweiten Feld beim vierten Zeichen und
endet mit diesem Feld. Sie geben das Sortierfeld so an:
sort -k 2.4,2 (neue Syntax) oder
sort +1.3 -2 (alte Syntax)
Erläuterung:
Ende Ende Ende
Feld1 Feld2 Feld3
| | |
030-456537 A.Meierlein München
| |
Sortierfeld
2.4 Beim 4. Zeichen des 2. Feldes anfangen
+1.3 Feld 1 und 3 Zeichen überspringen:
das 4. Zeichen nach Feld 1 ist das 1. Zeichen im Sortier-
feld: M
-2 Feld 2 und 0 Zeichen überspringen:
das 1. Zeichen nach Feld 2 ist das 1. Zeichen nach dem Sor-
tierfeld: Leerzeichen. Das Zeichen davor ist also das letzte
Zeichen im Sortierfeld: n
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
Beachten Sie, daß Standard-Feldtrennzeichen, anders als ein
mit Option -t definiertes Feldtrennzeichen, zum nachfolgen-
den Feld gehören. Das 1. Zeichen von Feld 2 ist somit das
Leerzeichen, das 2. Zeichen das A usw.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn datei mit -
beginnt.
datei
Name der Datei, die Sie sortieren möchten.
Sie können mehrere Dateien angeben. Alle angegebenen Dateien wer-
den sortiert und zusammengemischt, so daß die Eingabezeilen aus
allen Dateien sortiert auf die Standardausgabe ausgegeben werden.
In der Eingabedatei zählen alle Buchstabenfolgen als ein Buch-
stabe, 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 Standardeingabe.
datei nicht angegeben: sort liest von der Standardeingabe.
ENDESTATUS
0 Alle Eingabedateien wurden korrekt bearbeitet. Bei Angabe von -c
war die Eingabedatei korrekt sortiert.
1 Bei Angabe von -c: die Eingabedatei war nicht korrekt sortiert.
Bei Angabe von -c -u: es wurden Eingabezeilen mit identischen Sor-
tierfeldern gefunden.
>1 Fehler.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte.
Die Umgebungsvariable LCCOLLATE bestimmt die gültige Sortierreihen-
folge, nach der sort die Eingabe sortiert.
LCCTYPE legt für die Optionen -b, -d, -f und -i die Zeichenklassifi-
zierung fest.
LCNUMERIC bestimmt für die Option -n die gültige Darstellung des
Dezimalpunkts.
Seite 7 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
LCTIME bestimmt für die Option -M die aktuell gültigen Monatsnamen
und ihre Abkürzung und beeinflußt ihre Sortierreihenfolge.
Die Antwort auf Ja/Nein-Abfragen muß in der jeweils definierten Spra-
chumgebung erfolgen.
Wenn LCMESSAGES, LCCOLLATE, LCCTYPE, LCNUMERIC oder LCTIME nicht
oder als leere Zeichenkette definiert ist, wird der Wert von LANG als
Standardwert für die jeweils nicht gesetzte oder leere Variable heran-
gezogen. Ist auch LANG nicht oder als leere Zeichenkette definiert,
verhält sich das System so, als wäre es nicht internationalisiert.
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
Hat eine der Variablen für die internationale Umgebung einen ungülti-
gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.
BEISPIELE
Beispiel 1
Der Inhalt von eingabedatei soll nach dem zweiten Feld sortiert wer-
den.
$ sort -k 2,2 eingabedatei
Beispiel 2
Der Inhalt von eingabedatei1 und eingabedatei2 soll in umgekehrter
Reihenfolge nach dem zweiten Zeichen im zweiten Feld (= 1. Nicht-
Leerzeichen bei vorausgesetzter Feldtrennung durch jeweils 1 Leerzei-
chen) sortiert werden; die Ausgabe soll in ausgabedatei geschrieben
werden.
$ sort -r -o ausgabedatei -k 2.1,2.2 eingabedatei1 eingabedatei2
Beispiel 3
Der Inhalt von eingabedatei1 und eingabedatei2 soll in umgekehrter
Reihenfolge nach dem ersten Nicht-Leerzeichen im zweiten Feld sortiert
werden.
$ sort -r -o ausgabedatei -k 2.0b,2.1b eingabedatei1 eingabedatei2
Beispiel 4
Die Datei /etc/passwd soll nach den Benutzernummern (3. Feld) sortiert
ausgegeben werden.
$ sort -t : -k 3n,3 /etc/passwd
Seite 8 Reliant UNIX 5.44 Gedruckt 11/98
sort(1) sort(1)
Beispiel 5
Die bereits sortierte Datei eingabedatei soll ausgegeben werden.
Dabei soll von mehreren Zeilen, bei denen das dritte Feld überein-
stimmt, jeweils nur die erste Zeile ausgegeben werden.
$ sort -u -k 3,3 eingabedatei
DATEIEN
/var/tmp/stm???
Temporäre Dateien
SIEHE AUCH
comm(1), join(1), uniq(1), ctype(3C).
Seite 9 Reliant UNIX 5.44 Gedruckt 11/98