Gut sortiert

Zu Befehl: sort

01.01.2005
Ordnung ist das halbe Leben, auch auf der Kommandozeile. Mit dem Tool "sort" ordnen Sie Dateilisten und Programmausgaben. Wer will, fügt mit Hilfe dieses kleinen aber feinen Programms sogar mehrere Dateien sortiert zusammen.

Zu Befehl

Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.

Der Name ist Programm: Mit dem Kommando sort sortieren Sie zeilenweise. Dabei bearbeitet das Kommando entweder angegebene Dateien oder liest aus der Standardeingabe. Nach welchen Kriterien sortiert wird, bestimmen Sie selbst – sort kennt viele Parameter, die eine gute Feinabstimmung ermöglichen.

Erste Sortierübungen

Eine Datei, die sich prima für Sortierübungen eignet, ist . Werfen Sie einen Blick hinein, sehen Sie, dass die einzelnen Zeilen jeweils bestimmte Felder enthalten, z. B.:

huhn:x:506:100:Heike Jurzik:/home/huhn:/bin/bash

Die einzelnen Felder sind jeweils durch Doppelpunkte voneinander abgetrennt und enthalten den Benutzernamen (huhn), das Passwort (x bedeutet, das Passwort steht in /etc/shadow), die User Identification Number (UID, für "normale" Benutzer eine Zahl ab 100), die Group Identification Number (GID), weitere Informationen (wie Name und Telefonnummer des Benutzers usw.), das Home-Verzeichnis des Benutzers und die Standard-Shell.

Um zu überprüfen, ob die Datei bereits sortiert ist, rufen Sie sort mit dem Parameter -c auf:

$ sort -c /etc/passwd
sort: /etc/passwd:2: ungeordnet: bin:x:1:1:bin:/bin:/bin/bash

Die Ausgabe verrät: Die Datei ist nicht sortiert – schon in der zweiten Zeile befindet sich ein ungeordneter Eintrag. Wollen Sie die Passwortdatei sortieren, lassen Sie sort (zunächst ohne weitere Parameter) darauf los. Wenn Sie die Ausgabe nicht umleiten, landet sie im Terminal. Alternativ verwenden Sie den Operator > und geben einen Dateinamen an:

sort /etc/passwd > passwd_sort

Mit dem Größerzeichen überschreiben Sie die Datei passwd_sort, falls es sie schon gibt. Wollen Sie das verhindern, setzen Sie den Operator >> ein: Er hängt die Ausgabe an das Ende der Datei an.

Die Ausgabe des ersten Sortierversuchs zeigt: sort hat (ausgehend vom ersten Feld, also dem Benutzernamen) die Datei alphabetisch sortiert (Abbildung 1) und listet nun den "Pseudonutzer" at zuerst auf. Um die Reihenfolge umzukehren, setzen Sie die Option -r ein – dann taucht der Eintrag wwwrun am Anfang der Liste auf. Sortieren Sie Dateien, die doppelte Einträge enthalten, unterdrücken Sie die Ausgabe identischer Zeilen mit dem Parameter -u ("unique", einmalig).

Abbildung 1: Mit "sort" erhalten Sie im Handumdrehen eine alphabetisch geordnete Passwortdatei.

Spalten

Sofern nicht anders angegeben, untersucht sort ganze Zeilen und beginnt – wie im ersten Beispiel schön zu sehen – mit dem ersten Buchstaben. Mit ein paar Tricks überreden Sie das Kommando, anhand einer bestimmten Spalte zu sortieren. Standardmäßig sucht sort dabei nach Leerzeichen zwischen den Einträgen und interpretiert diese als Spaltengrenzen. Um dieses Verhalten besser zu verdeutlichen, stellen Sie sich eine fiktive Passwortdatei mit folgendem Aufbau vor:

…
peggy x 502 100 Peggy Gans /home/peggy /bin/bash
huhn x 506 100 Heike Jurzik /home/huhn /bin/bash
petronella x 507 100 Petronella Huhn /home/petronella /bin/bash
…

Um diese Liste jetzt nach der UID (also der dritten Spalte) zu sortieren, verwenden Sie den Parameter -k und geben als weitere Option die Nummer der Spalte an:

$ sort -k 3 /etc/passwd
root x 0 0 root /root /bin/bash
vdr x 100 33 Video Disk Recorder /var/spool/video /bin/false
uucp x 10 14 Unix-to-Unix CoPy system /etc/uucp /bin/bash
…

Leider interpretiert sort die Zahlen einfach als ASCII-Zeichenketten, die es alphabetisch sortiert. Dieses Verhalten führt dazu, dass beispielsweise die Zahl "534" vor "55" eingeordnet wird, weil alphabetisch gesehen "53" kleiner als "55" ist. In diesem Beispiel führt das dazu, dass die UID 100 vor der UID 2 eingeordnet wird. Abhilfe schafft die Option -n, mit der sort Nummern richtig einsortiert:

$ sort -nk 3 /etc/passwd
root x 0 0 root /root /bin/bash
bin x 1 1 bin /bin /bin/bash
daemon x 2 2 Daemon /sbin /bin/bash
…

Da die echte Passwortdatei keine Leerzeichen, sondern Doppelpunkte als Trenner zwischen den Einträgen enthält, muss es eine Möglichkeit geben, sort das verwendete Trennzeichen mit auf den Weg zu geben. Hier kommt der Parameter -t "trenner" ins Spiel. Geben Sie das Trennzeichen in Hochkommas eingeschlossen an, damit die Bash es nicht selbst interpretiert. Für die echte /etc/passwd verwenden Sie das Kommando:

sort -t ":" -nk 3 /etc/passwd

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Textberge bewältigen
    Genießen Sie einen Crashkurs in den Textbeararbeitungs- und Filterfunktionen der Linux-Shell, der Sie auch die schlimmsten Textberge bewältigen lässt.
  • Sortiert und zugenäht
    Mit dem Kommando sort sortieren Sie Zeilen in Dateien oder aus der Standardeingabe. Als reines Sortierprogramm konzipiert, arbeitet das Tool oft mit anderen Programmen auf der Kommandozeile zusammen.
  • Einführung in die Shell – Teil 3
    In den ersten zwei Teilen der Shell-Einführung [1,2] haben wir Sie mit den Grundlagen der Shell vertraut gemacht. Jetzt stellen wir einige Spezialtools vor, mit denen die Shell besonders leistungsfähig wird – darunter "xargs".
  • Teil 4: Kontrollstrukturen
    In den ersten drei Teilen haben Sie die Grundlagen der Bash-Programmierung und die Stringverarbeitung kennengelernt. Das genügt aber nicht, um wirklich leistungsfähige Programme zu schreiben – Kontrollstrukturen tun Not.
  • The Answer Girl
    Solange man online ist, halten sich die Sprachprobleme in Grenzen: Web-Wörterbücher wie dict.leo.org helfen in meistens akzeptabler Geschwindigkeit über die Hürden des fehlenden (Englisch-) Wortschatzes hinweg. Doch wehe, man ist weder mit Standleitung noch Flatrate gesegnet: Schon ärgert man sich, das Regal mit den papiernen Wörterbüchern am anderen Ende des Raums aufgestellt zu haben.
Kommentare

Infos zur Publikation

LU 12/2014: ANONYM & SICHER

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...