Verwenden Sie sort
die -k
Option , um nach (mehreren) Spalten gleichzeitig zu sortieren:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
sortiert zuerst nach der ersten Spalte und dann -k2n
nach der zweiten¹ numerisch, wenn die erste Spalte gebunden wurde, sodass Sie Ihre Ausgabe in der gewünschten Reihenfolge erhalten: Sortieren nach dem ersten Element der zweiten Spalte, nur wenn das erste Spaltenelement dasselbe ist.
Bei der numerischen Sortierung wird das Feld nur untersucht, bis es nicht mehr eine Zahl ist, sodass Sie nur das erste Element davon vergleichen können.
Wenn die beiden Schlüssel gleich sind, werden sort
die vollständigen Zeilen als letzter Ausweg lexikalisch verglichen. Zum Beispiel in A 1-10
vs A 1-2
sind die ersten Tasten identisch ( A
string), und der zweite Schlüssel als auch (beide als die Zahl behandelt werden 1
), so ist, dann sort
vergleicht A 1-10
vs A 1-2
lexikalisch und letztere größer als 2
Art nach 1
. Die GNU - Implementierung von sort
hat eine -V
Option oder V
Tastenflag eine ausführen Version sortieren, die die Ausnahme , dass Sequenzen von Dezimalstellen wie ein lexikalischen Vergleich ist innerhalb der Strings numerisch verglichen werden, so sort -k1,1 -k2V
würde Art A 1-10
nach , A 1-2
weil 10
als eine Zahl größer als 2
.
¹ -k2
bedeutet technisch gesehen den Teil der Zeile, der mit dem zweiten Feld beginnt (nach dem ersten Übergang von einem Nicht-Leerzeichen zu einem Leerzeichen) und am Ende der Zeile endet, jedoch mit dem n
Flag, das -k2,2n
nur dem führenden Teil entspricht das ist eine Zahl betrachtet.