Użyj opcji sort
„s -k
opcja do sortowania przez (wielokrotny) kolumn na raz:
$ sort -k1,1 -k2n input
A 1-2
A 3-4
A 6-8
B 5-9
B 7-10
-k1,1
sortuje najpierw pierwszą kolumnę, a następnie -k2n
drugą¹ liczbowo, gdy pierwsza kolumna została powiązana, więc otrzymujesz wynik w odpowiedniej kolejności: sortowanie według pierwszego elementu drugiej kolumny, tylko jeśli pierwszy element kolumny jest taki sam.
Podczas sortowania numerycznego będzie sprawdzane tylko pole, dopóki nie przestanie być liczbą, dzięki czemu uzyskasz porównanie tylko pierwszego jego elementu.
Kiedy oba klucze porównują to samo, sort
porównuje pełne linie leksykalnie jako porównanie w ostateczności. Na przykład w A 1-10
vs A 1-2
, pierwsze klucze są identyczne ( A
ciąg znaków), a także drugi klucz (oba są traktowane jako liczba 1
), więc sort
porównuje A 1-10
vs A 1-2
leksykalnie, a ten drugi jest większy jak 2
sortuje po 1
. Implementacja GNU sort
ma -V
opcję lub V
flagę kluczową do wykonania sortowania według wersji , co jest jak porównanie leksykalne, z tym wyjątkiem, że sekwencje cyfr dziesiętnych w łańcuchach są porównywane numerycznie, więc sort -k1,1 -k2V
posortowałoby A 1-10
po, A 1-2
ponieważ 10
ponieważ liczba jest większa niż 2
.
¹ technicznie -k2
oznacza część linii rozpoczynającą się od drugiego pola (po pierwszym przejściu z niepustej do pustej) i kończącą się na końcu linii, ale z n
flagą, która jest równoważna -k2,2n
jako tylko część wiodąca to stanowi liczbę jest brany pod uwagę.