• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved] sort - mehrere Spalten sortieren...

Hallo Leute,

ich habe hier ein Problem mit sort. Meinem Verständnis nach müsste ich mit sort nach mehreren Spalten sortieren können. Z.B. erst nach Spalte 3, und anschliessend nach Spalte 5.
Das klappt aber nicht wie gewünscht.

Beispiel:
Code:
$ cat teiln0.dat
Smith:Herbert:Pantington AC:123:Men
Prowler:Desmond:Lameborough TFC:13:Men
Fleetman:Fred:Rundale Sportsters:217:Men
Jumpabout:Mike:Fairing Track Society:154:Men
de Leaping:Gwen:Fairing Track Society:26:Ladies
Runnington:Vivian:Lameborough TFC:117:Ladies
Sweat:Susan:Rundale Sportsters:93:Ladies
Runnington:Kathleen:Lameborough TFC:119:Ladies
Longshanks:Loretta: Pantington AC:55:Ladies
O'Finnan:Jack:Fairing Track Society:45:Men
Oblomovsky:Katie:Rundale Sportsters:57:Ladies

$ sort -bif -t: -k 3 teiln0.dat
Jumpabout:Mike:Fairing Track Society:154:Men
de Leaping:Gwen:Fairing Track Society:26:Ladies
O'Finnan:Jack:Fairing Track Society:45:Men
Runnington:Vivian:Lameborough TFC:117:Ladies
Runnington:Kathleen:Lameborough TFC:119:Ladies
Prowler:Desmond:Lameborough TFC:13:Men
Smith:Herbert:Pantington AC:123:Men
Longshanks:Loretta: Pantington AC:55:Ladies
Fleetman:Fred:Rundale Sportsters:217:Men
Oblomovsky:Katie:Rundale Sportsters:57:Ladies
Sweat:Susan:Rundale Sportsters:93:Ladies

Schön und gut, wenn ich jetzt aber innerhalb eines Vereins nach Männlein und Weiblein sortieren will kommt folgendes:
Code:
$ sort -bif -t: -k 3 -k 5 teiln0.dat
Jumpabout:Mike:Fairing Track Society:154:Men
de Leaping:Gwen:Fairing Track Society:26:Ladies
O'Finnan:Jack:Fairing Track Society:45:Men
Runnington:Vivian:Lameborough TFC:117:Ladies
Runnington:Kathleen:Lameborough TFC:119:Ladies
Prowler:Desmond:Lameborough TFC:13:Men
Smith:Herbert:Pantington AC:123:Men
Longshanks:Loretta: Pantington AC:55:Ladies
Fleetman:Fred:Rundale Sportsters:217:Men
Oblomovsky:Katie:Rundale Sportsters:57:Ladies
Sweat:Susan:Rundale Sportsters:93:Ladies

Warum funktioniert das nicht? Ich steh völlig auf dem Schlauch...

Gruss
 
Hab ich natürlich auch versucht, aber sieh selbst:
Code:
sort -bif -t: -k 3,5 teiln0.dat
Jumpabout:Mike:Fairing Track Society:154:Men
de Leaping:Gwen:Fairing Track Society:26:Ladies
O'Finnan:Jack:Fairing Track Society:45:Men
Runnington:Vivian:Lameborough TFC:117:Ladies
Runnington:Kathleen:Lameborough TFC:119:Ladies
Prowler:Desmond:Lameborough TFC:13:Men
Smith:Herbert:Pantington AC:123:Men
Longshanks:Loretta: Pantington AC:55:Ladies
Fleetman:Fred:Rundale Sportsters:217:Men
Oblomovsky:Katie:Rundale Sportsters:57:Ladies
Sweat:Susan:Rundale Sportsters:93:Ladies

Any hints?

Gruss
 
Das ganze lässt sich durch ein "-k3,3 -k5,5" lösen. Hier lag also ein Fehler in meinen Unterlagen vor (den aber durch aufmerksameres RTFM selbst hätte erkennen können).

Danke trotzdem allen...

Gruss
 
Ich kanns ja mal versuchen:
-k3,5 bedeutet Spalten "3 bis 5" sortieren
-k3,3 -k5,5 bedeutet Spalten "3 bis 3 und 5 bis 5" sortieren

Daß man Feld-Bereiche angeben muss, wenn man mehrere Felder sortieren will ist zwar nicht gerade logisch, aber diese Syntax tut genau das was ich will. Frag mich nicht, warum -k3 -k5 nicht funktioniert. sort will halt einen Bereich (bzw. deren zwei) obwohl das nicht so ganz genau aus der manpage hervorgeht:

man sort:
-k, --key=POS1[,POS2]
Schlüssel geht von POS1 bis POS2 (beginnend mit 1)

Das bedeutet bei -k3,5 - richtig interpretiert: 1. Sortierrang Spalte 3, denn 2. Rang Spalte 4 und zuletzt als 3. Rang Spalte 5.
Also war die Sortierung für die angegebenen Argumente richtig und entsprach nur nicht dem, was ich erwartet hatte.

Der Entscheidende Tip kam aus meiner Mailingliste - alleine wäre ich da nie drauf gekommen...

Gruss
 
Oben