Powiedz, że mam ten plik.sortowanie za pomocą wielu kluczy za pomocą polecenia sortowania Linuksa
$ cat a.txt
c 1002 4
f 1001 1
d 1003 1
a 1001 3
e 1004 2
b 1001 2
Chcę go posortować według drugiej kolumny, a następnie według trzeciej kolumny. Kolumna druga to liczby, a kolumna 3 może być traktowana jako ciąg. Wiem, że następujące polecenie działa dobrze.
$ sort -k2,2n -k3,3 a.txt
f 1001 1
b 1001 2
a 1001 3
c 1002 4
d 1003 1
e 1004 2
Jednak myślę, że sort -k2n a.txt
powinien również działać, a tak nie jest.
$ sort -k2n a.txt
a 1001 3
b 1001 2
f 1001 1
c 1002 4
d 1003 1
e 1004 2
Wygląda na to, że sortuje według kolumny drugiej, a następnie według kolumny pierwszej zamiast trzeciej. Dlaczego to się dzieje? Czy to błąd, czy nie? Przyczyna sort -k2 a.txt
działa poprawnie z powyższymi danymi, ponieważ te liczby są po prostu ustaloną szerokością.
Moja sortowana wersja to sort (GNU coreutils) 8.15
w cygwin.
Interesujące. "sort -k2 a.txt" będzie działać w * tym * przypadku. '-k2' mówi, aby sortować za pomocą klucza, który zaczyna się od pola 2 i kontynuuje do końca linii. '-k2n' mówi, aby sortować pole 2 w porządku numerycznym; może to oznaczać, że klucz sortowania kończy się napotkaniem białych znaków między polami 2 i 3. Dobrym pomysłem może być wklejenie wersji swojego sortu do pytania. –
Używanie 'sort (GNU coreutils) 8.5' Jestem w stanie odtworzyć opisane zachowanie na stabilnej wersji Debiana. – alk
@ MikeSherrill'Catcall 'Podczas próby sortowania wartości liczbowej numerycznie sortowanie (1) powraca do sortowania ciągów znaków. '" 1001 3 "' itp. Jako przez '-k2n' są * nie * liczbowe. – PointedEars