Zu Befehl: sort

Gut sortiert

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
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ä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.
  • Beobachtet
    Linux führt Protokoll über alle Aktionen, die auf dem System stattfinden. Dazu gehört auch, wann welche Benutzer aktiv waren und was sie unternommen haben.
  • 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".
  • Mini-Datenbanken, Teil 1: Quicklist
    Wer in Verbindung mit Linux das Wort "Datenbanken" hört, denkt unwillkürlich an serverbasierte Systeme wie PostgreSQL, MySQL [1] oder Interbase [2]. Es ist unbestritten, dass diese Programme für die Verwaltung tausender Adressen oder für Internetshops ihre Berechtigung haben. Für Diejenigen, die nur ein paar Zeitschriftenartikel oder ihre Kochrezeptsammlung verwalten wollen, sind sie jedoch hoffnungslos überdimensioniert.
Kommentare

Infos zur Publikation

LU 12/2016: Neue Desktops

Digitale Ausgabe: Preis € 5,99
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

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

Aktuelle Fragen

Drucker Epson XP-332 unter ubuntu 14.04 einrichten
Andrea Wagenblast, 30.11.2016 22:07, 2 Antworten
Hallo, habe vergeblich versucht mein Multifunktionsgerät Epson XP-332 als neuen Drucker unter...
Apricity Gnome unter Win 10 via VirtualBox
André Driesel, 30.11.2016 06:28, 2 Antworten
Halo Leute, ich versuche hier schon seit mehreren Tagen Apricity OS Gnome via VirtualBox zum l...
EYE of Gnome
FRank Schubert, 15.11.2016 20:06, 2 Antworten
Hallo, EOG öffnet Fotos nur in der Größenordnung 4000 × 3000 Pixel. Größere Fotos werden nic...
Kamera mit Notebook koppeln
Karl Spiegel, 12.11.2016 15:02, 2 Antworten
Hi, Fotografen ich werde eine SONY alpha 77ii bekommen, und möchte die LifeView-Möglichkeit nu...
Linux auf externe SSD installieren
Roland Seidl, 28.10.2016 20:44, 1 Antworten
Bin mit einem Mac unterwegs. Mac Mini 2012 i7. Würde gerne Linux parallel betreiben. Aber auf e...