Shells: Tutorial


* Einführung * Installation * Paketmanager * Grundlagen * Shells * Entwicklung * KDE * Skriptsprachen * AWK * PHP * Perl * Apache * Veranstaltungen * Schulungen * Bücher * Netzwerk * OpenOffice * OpenSource * Samba

Shells


© <a href="http://www.fotolia.de/p/29003">Ljupco Smokovski</a> - FOTOLIA
Home
Erste Schritte mit der Bourne-Shell
Dateien zeilenweise zusammenfügen
Head or Tail
Schleifen und Zählen
Shell-Variablen
Pipes
Sortieren von Daten
Wer sucht der findet!
Praktische Shell-Skripte
Rechtschreibung
Schleifen und elegant Zählen
Texte formatieren mit fmt und fold
Umlenkung der Ein- und der Ausgaben
Klammer-Erweiterung
Verknüpfen von Textdateien mittels Schlüsselfeldern
Mit freundlicher Unterstützung von:

Linux-Kurse und Seminare Linux Kurse
Veranstalter des
Linux-Tag
am Bodensee
2007 und 2008

Kontakt
Haftung
Impressum
Problem Hilfe Startseite


Sortieren von Daten


Mit dem Befehl sort hat man ein mächtiges Werkzeug Daten zu sortieren.
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
Sort kann aber nicht nur alphabetisch sondern auch numerisch sortieren. Nehmen wir an, dass in einer Datei "zahlen.txt" folgender Inhalt gespeichert ist:

a 4.543
c 7.3232
b 98.3232
x 7.888
m 0.3432

sort -k 2 -n zahlen.txt
liefert dann folgende nach der zweiten Spalte numerisch geordnete Ausgabe:

m 0.3432
a 4.543
x 7.888
c 7.3232
b 98.3232

Achtung: Minus- und Pluszeichen vor Zahlen  vor Zahlen werden entsprechend ihrer mathematischen Bedeutung korrekt sortiert, ebenso werden Zahlen mit führendem Komma, korrekt als 0. interpretiert. Zahlen in Exponentialschreibweise werden aber nicht korrekt sortiert!

Sortiert man nachfolgende Datei mit obigem Befehl
a 4.543
c 7.3232
b 98.3232
x 7.888
m 0.3432
k .65e-12
l -1.65e-12
u +1.65e-12

erhält man

x -7.888
l -1.65e-12
u +1.65e-12
k .65e-12
m 0.3432
a 4.543
c 7.3232
b 98.3232



Option
Beschreibung

-d
Bewirkt eine telefonbuchmäßige Sortierung, d.h. alle Zeichen außer Leerzeichen, Ziffern und Buchstaben werden nicht berücksichtigt.

-f
Möchte man nicht zwischen Groß- und Kleinschreibung unterscheiden, ist dies die richtige Option. Das f steht übrigens für fold, was im Englischen (zusammen)falten, zusammenklappen bzw. zusammenlegen bedeutet.

-i
bedeutet bei sort nicht wie sonst häufig üblich "case insensitive". Wenn diese Option gesetzt ist, werden alle nichtdruckbaren Felder übergangen.

-g
allgemeine numerische Sortierung

-r
In umgekehrter Reihenfolge sortieren

-t
Die Option dient zur Definition eines Feldtrenners. "-t:" definiert den Doppelpunkt als Feldtrenner

© Copyright 2007 - 2010, Bernd Klein mit freundlicher Unterstützung von Bodenseo, Linux-Kurse und Schulungen,
Foto linke Seite (Mann mit Strick und Colt): Foto: © Ljupco Smokovski, fotolia 984022