Możesz użyć wielu -kflag do sortowania według więcej niż jednej kolumny. Na przykład, aby posortować według nazwiska, a następnie imienia jako rozstrzygający remis:
sort -k 2,2 -k 1,1 file.txt
Odpowiednie opcje z „sortowania według człowieka”:
-k, --key = POZ1 [, POZ2]
rozpocznij klucz na POS1, zakończ go na POS2 (początek 1)
POS to F [.C] [OPTS], gdzie F to numer pola, a C to pozycja znaku w polu. OPTS to jedna lub więcej jednoliterowych opcji kolejności, które zastępują globalne opcje kolejności dla tego klucza. Jeśli nie podano żadnego klucza, użyj całej linii jako klucza.
Po prostu zachowaj ostrożność, --field-separator=','jeśli możesz mieć operator wprowadzania danych, wpisując wartości dla „Imię”, takie jak „Billy Bob” lub cokolwiek ... spacje mogą łatwo dostać się do danych, jeśli nie będziesz się przed nimi chronić, ale przecinki są stosunkowo mało prawdopodobne.
Tony Delroy
1
W tych polach są bardzo prawdopodobne przypadki przecinków, np. „Smith, Jr.” lub „McDowell Sr.” lub „Dr. John” lub „New York, NY”
jbnunn,
2
Zwróć uwagę, że jeśli kolumny są wyrównane wizualnie, tj. Między polami występuje zmienna liczba spacji, musisz użyć tej -bopcji. Dzieje się tak, ponieważ w sortrzeczywistości bierze się pod uwagę, że ciąg do sortowania zaczyna się tuż po przecinku, a nie od pierwszej litery kolumny. Ponadto może być konieczne poprzedzenie polecenia przedrostkiem LC_ALL=C, aby uniknąć efektów ubocznych wynikających z ustawień regionalnych, które mogą wystąpić nawet w przypadku prostego pliku ASCII.
calandoa
@calandoa Dzięki za udział w -b( --ignore-leading-blanks). Aby trochę wyjaśnić: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2daje a<SPACE><SPACE>bpierwszą (druga kolumna zaczyna się po pierwszej non-blank to blank transitioni <SPACE><SPACE>bjest przed <SPACE>a), ale wraz z -bnią daje aa<SPACE>azgodnie z oczekiwaniami ( ajest przed b).
Kirill Bulygin
7
Aby posortować tylko według drugiego pola (a więc tam, gdzie pasują drugie pola, wiersze z dopasowaniami pozostają w kolejności, w jakiej znajdują się w oryginale, bez sortowania według innych pól):
Odpowiedzi:
Jeśli to jest UNIX:
Możesz użyć wielu
-k
flag do sortowania według więcej niż jednej kolumny. Na przykład, aby posortować według nazwiska, a następnie imienia jako rozstrzygający remis:Odpowiednie opcje z „sortowania według człowieka”:
źródło
--field-separator=','
jeśli możesz mieć operator wprowadzania danych, wpisując wartości dla „Imię”, takie jak „Billy Bob” lub cokolwiek ... spacje mogą łatwo dostać się do danych, jeśli nie będziesz się przed nimi chronić, ale przecinki są stosunkowo mało prawdopodobne.-b
opcji. Dzieje się tak, ponieważ wsort
rzeczywistości bierze się pod uwagę, że ciąg do sortowania zaczyna się tuż po przecinku, a nie od pierwszej litery kolumny. Ponadto może być konieczne poprzedzenie polecenia przedrostkiemLC_ALL=C
, aby uniknąć efektów ubocznych wynikających z ustawień regionalnych, które mogą wystąpić nawet w przypadku prostego pliku ASCII.-b
(--ignore-leading-blanks
). Aby trochę wyjaśnić:echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2
dajea<SPACE><SPACE>b
pierwszą (druga kolumna zaczyna się po pierwszejnon-blank to blank transition
i<SPACE><SPACE>b
jest przed<SPACE>a
), ale wraz z-b
nią dajeaa<SPACE>a
zgodnie z oczekiwaniami (a
jest przedb
).Aby posortować tylko według drugiego pola (a więc tam, gdzie pasują drugie pola, wiersze z dopasowaniami pozostają w kolejności, w jakiej znajdują się w oryginale, bez sortowania według innych pól):
źródło
FWIW, tutaj jest metoda sortowania pokazująca, które procesy używają najwięcej pamięci Virt.
memstat | sort -k 1 -t':' -g -r | less
Opcje sortowania są ustawione na pierwszą kolumnę, używając: jako separatora kolumn, sortowania numerycznego i sortowania w odwrotnej kolejności.
źródło
W związku z tym możesz zmienić numer kolumny.
źródło