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 08/2016: Multimedia

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

Wie kann man das berichtigen
Udo Muelle, 17.07.2016 20:39, 1 Antworten
Fehlschlag beim Holen von http://extra.linuxmint.com/dists/rosa/main/binary-i386/Packages Hash-S...
Installation Genimotion
Horst Müller, 15.07.2016 17:00, 1 Antworten
Hallo, ich kann Genimotion nicht installieren. Folgende Fehlermeldung habe ich beim Aufruf erh...
Probleme beim Hochfahren der Terastaion 5400 mit Unix-Distrib
Sheldon Cooper, 10.07.2016 09:32, 0 Antworten
Hallo ihr lieben, habe seit zwei Tagen das Problem, das das NAS (Raid5) nicht mehr sauber hoch...
Mit Firewire Videos improtieren?
Werner Hahn, 09.06.2016 11:06, 5 Antworten
Ich besitze den Camcorder Panasonic NV-GS330, bei dem die Videos in guter Qualität nur über den 4...
lidl internetstick für linux mint
rolf meyer, 04.06.2016 14:17, 3 Antworten
hallo zusammen ich benötige eure hilfe habe einen lidl-internetstick möchte ihn auf linux mint i...