Plik sortowania powłoki Linuksa według drugiej kolumny?

88

Mam taki plik:

FirstName, FamilyName, Address, PhoneNumber

Jak mogę to posortować według FamilyName?

Rami Jarrar
źródło
który system operacyjny i procesor poleceń?
Preet Sangha
1
Możliwy duplikat sortowania uniksowego z
separatorem

Odpowiedzi:

153

Jeśli to jest UNIX:

sort -k 2 file.txt

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.

-t, --field-separator = WRZ

użyj SEP zamiast przejścia niepustego do pustego

John Kugelman
źródło
2
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):

sort -k 2,2 -s orig_file > sorted_file
Cian
źródło
3

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.

netskink
źródło
2
sort -nk2 file.txt

W związku z tym możesz zmienić numer kolumny.

Dheeraj Kumar
źródło