Einführung in die Shell-Programmierung

Shells

Sortieren mit sort


sort teilt jede Zeile der Eingabedatei in Felder ein, wobei als Voreinstellung das Leerzeichen (Blank) und das Tab als Trenner fungieren.  Jede Zeile wird über diese Felder von links nach rechts sortiert. Falls die Einträge beim am weitesten links stehenden Feld (Feld 0)  zweier Zeilen gleich sind macht sort mit dem nächsten Feld weiter. Analog gilt dies bei Gleichheit für alle weiteren Felder. Am besten veranschaulicht man sich dies an einem Beispiel.

Betrachten wir folgende in adressen.txt gespeicherte Datei:

Frank Meyer Radolfzell
Peter Rabe Konstanz
Ottmar Huber Rosenheim
Anna Rabe Radolfzell
Oskar Lindner Konstanz
Anna List Freiburg
Franziska Huber Rosenheim
Helge Rabe Konstanz


Der Shell-Aufruf sort adressen.txt liefert dann folgende sortierte Ausgabe:
Anna List Freiburg
Anna Rabe Radolfzell
Frank Meyer Radolfzell
Franziska Huber Rosenheim
Helge Rabe Konstanz
Oskar Lindner Konstanz
Ottmar Huber Rosenheim
Peter Rabe Konstanz

Bei diesem Beispiel stellt sich in nahezu natürlicher Weise die Frage, wie man diese Adressenliste nach dem Nachnamen sortieren kann. Der Aufruf sort +1 -2 adressen.txt bringt das gewünscht Resultat:
Franziska Huber Rosenheim
Ottmar Huber Rosenheim
Oskar Lindner Konstanz
Anna List Freiburg
Frank Meyer Radolfzell
Anna Rabe Radolfzell
Helge Rabe Konstanz
Peter Rabe Konstanz

"+1" bedeutet, dass sort ab der 1. Spalte mit der Sortierung beginnen soll. (Die Nummerierung der Spalten beginnt mit 0!) "-2" bedeutet, dass die Sortierung nur bis zur 2. Spalte erfolgen soll. Dies hat zur Folge, dass Anna Rabe aus Radolfzell for den beiden anderen Rabe der Liste erscheint. Dies entspricht in den meisten Fällen nicht dem, was wir eigentlich wollen. Wir können dies folgendermaßen korrigieren:
sort +1 -3 adressen.txt
Franziska Huber Rosenheim
Ottmar Huber Rosenheim
Oskar Lindner Konstanz
Anna List Freiburg
Frank Meyer Radolfzell
Helge Rabe Konstanz
Peter Rabe Konstanz
Anna Rabe Radolfzell


Zum Schluss behandeln wir noch die Frage, wie man sort benutzt, wenn keine Leerzeichen sondern z.B. Kommas als Feld-Trennzeichen (field separator) verwendet wurde, also z.B. obiges Beispiel in der Form

Frank, Meyer, Radolfzell
Peter, Rabe, Konstanz
Ottmar, Huber, Rosenheim
Anna, Rabe, Radolfzell
Oskar, Lindner, Konstanz
Anna, List, Freiburg
Franziska, Huber, Rosenheim
Helge, Rabe, Konstanz


gespeichert wäre.
Die Lösung ist denkbar einfach. Man muss lediglich den Parameter "-t," bei den Aufrufen benutzen, also:
  • sort -t, adressen.txt
  • sort -t, +1 -2 adressen.txt
  • sort -t, +1 -3 adressen.txt

© Copyright 2004 - 2008, Bodenseo, Linux-Kurse am Bodensee, Bernd Klein