sort to jedno z tych narzędzi Uniksa, które robi dokładnie to, co obiecuje nazwa: porządkuje linie tekstu. Domyślnie sortuje alfabetycznie (leksykograficznie, według bieżącego locale), ale prawdziwa siła tkwi w opcjach — możesz sortować liczbowo, po konkretnej kolumnie, odwrotnie, po rozmiarach plików czy nazwach miesięcy. Czyta z pliku albo ze standardowego wejścia, więc świetnie łączy się w potoki z grep, cut czy awk. Wynik trafia na standardowe wyjście, oryginalny plik zostaje nietknięty.
Składnia i najważniejsze opcje
Podstawowa forma: sort [OPCJE] [PLIK...]
-n— sortowanie numeryczne (żeby 10 było za 9, a nie po 1)-r— odwrotna kolejność (malejąco)-u— usuwa duplikaty, zostawia tylko unikalne linie-k POLE— sortuj po konkretnym polu/kolumnie (np.-k2)-t ZNAK— ustaw separator pól (domyślnie białe znaki)-f— ignoruj wielkość liter-h— sortowanie „ludzkich” liczb z jednostkami (2K, 4M, 1G)-c— nie sortuj, tylko sprawdź czy plik jest już posortowany
Przykłady użycia
sort nazwiska.txt— sortuje linie alfabetycznie i wypisuje wynik na ekran.sort -u emaile.txt— sortuje i od razu wyrzuca duplikaty (przydatne przy listach mailingowych).sort -t: -k3 -n /etc/passwd— sortuje użytkowników po UID (trzecie pole, separator dwukropek), numerycznie.du -h --max-depth=1 | sort -h— pokazuje katalogi posortowane po rozmiarze, od najmniejszego, z poprawnym rozumieniem K/M/G.sort -rn -k2 wyniki.txt | head— top wyników: sortuje malejąco po drugiej kolumnie liczbowo i pokazuje początek listy.
Częste błędy i pułapki
Klasyk: sort plik.txt > plik.txt — nie rób tego. Shell obcina plik do zera zanim sort zdąży go przeczytać, więc zostajesz z pustką. Do zapisu w miejscu użyj sort -o plik.txt plik.txt — to bezpieczne, bo sort obsługuje ten przypadek świadomie.
Druga pułapka to sortowanie liczb bez -n: domyślnie 100 wyląduje przed 9, bo znak „1″ jest wcześniej niż „9″. Zawsze przy liczbach dawaj -n (albo -h przy jednostkach).
Trzecia rzecz: wyniki bywają różne w zależności od LC_ALL/locale — polskie znaki i wielkość liter potrafią zmienić kolejność. Dla powtarzalności ustaw LC_ALL=C sort plik.txt, wtedy dostajesz czyste sortowanie po bajtach. Uważaj też, że -u uznaje linie za równe według użytego klucza, a nie całej linii — z -k potrafi wyciąć więcej, niż myślisz.
Powiązane komendy: uniq (usuwa sąsiednie duplikaty, wymaga wcześniejszego sortowania), comm (porównuje dwa posortowane pliki), cut i awk (wyciąganie kolumn), shuf (odwrotność — losowa kolejność).