Einführung in die Shell-Programmierung

Shells

Sortieren von Dateien mit numerischem Inhalt


Dieser Abschnitt baut auf der Einführung Sortieren mit sort auf.

Betrachten wir folgende Datei:

Frank Meyer Radolfzell 23,18
Peter Rabe Konstanz 17,02
Ottmar Huber Rosenheim -10,00
Anna Rabe Radolfzell 7,23
Oskar Lindner Konstanz 0,83
Anna List Freiburg 123,99
Franziska Huber Rosenheim 1,23
Helge Rabe Konstanz 7,45


Die Zahlen in der 4. Spalte (Achtung nach der Zählweise von sort entspricht dies der 3. Spalte, da sort mit 0 zu zählen beginnt!) können zum Beispiel Schulden in der Kaffeekasse eines Vereins (z.B. eine Linux User Gruppe irgendwo am Bodensee :-) ) darstellen. Nun möchte jemand diese Liste nach den Außenständen sortiert ausgeben und gibt folgenden Aufruf ein:
sort +3 -4 adressen.txt

Allerdings erfolgt die Sortorierung nun alphabetisch und nicht wie gewünscht numerisch:

Oskar Lindner Konstanz 0,83
Ottmar Huber Rosenheim -10,00
Franziska Huber Rosenheim 1,23
Anna List Freiburg 123,99
Peter Rabe Konstanz 17,02
Frank Meyer Radolfzell 23,18
Anna Rabe Radolfzell 7,23
Helge Rabe Konstanz 7,45


Der Parameter "-g" (general-numeric-sort) liefert schließlich das gewünscht Ergebnis:
sort -g +3 -4 adressen.txt

Ottmar Huber Rosenheim -10,00
Oskar Lindner Konstanz 0,83
Franziska Huber Rosenheim 1,23
Anna Rabe Radolfzell 7,23
Helge Rabe Konstanz 7,45
Peter Rabe Konstanz 17,02
Frank Meyer Radolfzell 23,18
Anna List Freiburg 123,99

Warnung: Ergebnis abhängig von der Ländereinstellung

Man erhält obige Resultate nur, wenn eine Ländereinstellung (locale) gewählt ist, die für Dezimalzahlen Kommas und nicht Punkte verwendet.

Es muss also z.B. folgende Einstellung (beispielsweise in .bashrc) vorgenommen worden sein:
export LANG=de_DE
Um sicher zu gehen, die richtigen, also die numerisch sortierten Ergebnisse zu erhalten, kann man auch sort mit folgender Option aufrufen:

LC_NUMERIC=C sort +3 -4 adressen.txt

Obiger Aufruf funktioniert innerhalb jeder Ländereinstellung.

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