Angenommen, ich habe diese Datei
b 10 foo
a 10 bar
a 2 bar
Ich möchte alphabetisch nach der dritten Spalte sortieren. Bei Gleichstand möchte ich numerisch nach der zweiten Spalte sortieren. In der Manpage des Unix-Sortierprogramms finden Sie Folgendes:
> sort -k3 -k2n a
Das gibt
a 2 bar
a 10 bar
b 10 foo
Welches ist richtig.
Was ich eigentlich möchte, ist, nach der ersten Spalte alphabetisch zu sortieren und bei Gleichstand nach der zweiten Spalte numerisch. Kann mir jemand erklären, warum
> sort -k1 -k2n a
Gibt
a 10 bar
a 2 bar
b 10 foo
Was ist schlicht und ergreifend falsch?
Antwort1
Der Grund, warum Ihr Beispiel nicht wie erwartet funktioniert, ist, dass sort
alle Positionen berücksichtigt werdennachauch das angegebene. In Ihrem Beispiel sortiert das Wörterbuch -k1
die Zeichenfolge sozusagen a 10 bar
vor a 2 bar
, und Sie benötigen keinen Tie-Break.
Sie müssen die Grenzen des Sortierschlüssels explizit angeben, wie auf der Manpage beschrieben:
-k, --key=POS1[,POS2]
start a key at POS1, end it at POS2 (origin 1)
Beispiel:
$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo