Linux manual

sort


NAZWA
sort - posortuj linie plików tekstowych

SKŁADNIA
sort [-cgmus] [-t separator] [-o plik-wyj] [-T kat-tymcz]
[-bdfiMnrz] [+poz1 [-poz2]] [-k poz1[,poz2]]
[plik...]

sort [--help] [--version]

OPIS
Dokumentacja niniejsza nie jest już utrzymywana i może być niedokładna
lub niekompletna. Autorytatywnym źródłem jest obecnie dokumentacja
Texinfo. Dostęp do niej uzyskasz wpisując w wierszu poleceń:
pinfo sort
lub
info sort.

Ta strona podręcznika opisuje polecenie sort w wersji GNU.

sort sortuje, zlepia lub porównuje wszystkie linie z podanych plików,
lub standardowego wejścia jeśli nie podano żadnych. Nazwa pliku "-"
oznacza standardowe wejście. Domyślnie, sort wypisuje rezultaty na
standardowe wyjście.

sort ma trzy tryby działania: sortowanie (domyślnie), zlepianie i
sprawdzanie posortowania. Następujące opcje zmieniają tryb działania:

-c Sprawdza czy podane pliki są już posortowane; jeśli nie wszys-
tkie są, wypisuje komunikat o błędzie i kończy pracę z kodem
równym 1.

-m Zlepia podane pliki sortując je jako grupę. Każdy plik
wejściowy powinien być już posortowany indywidualnie. sort
działa zawsze sortując, a nie lepiąc; zlepianie udostępniono
ponieważ jest ono szybsze w tych przypadkach, w których działa.

Para linii porównywana jest jak następuje: Jeśli podano jakieś pola
kluczowe, sort porównuje każdą parę pól, w porządku podanym w linii
komend, według skojarzonych opcji porządkowania, aż znaleziona zostanie
różnica albo przeszukane zostaną wszystkie pola. Wszystkie porównania
wykorzystują porządek znaków określony przez ustawienie narodowe
LC_COLLATE, chyba że podano inaczej.

Jeśli użyto której z globalnych opcji Mbdfinr, ale nie podano pól kluc-
zowych, sort porównuje całe linie według opcji globalnych.

W końcu, w ostatniej próbie, kiedy wszystkie porównywane klucze są
równe (lub nie podano żadnych opcji porządkujących), sort porównuje
linie bajt po bajcie w kolejności sklejania zależnej od maszyny.
Ostatnia próba porównania bierze pod uwagę opcję -r. Opcja -s (stable)
wyłącza ostatnią próbę porównania, tak że linie, w których wszystkie
pola są równie w porównaniu zostają pozostawione w pierwotnej kole-
jności względnej. Jeśli nie podano żadnych pól ani opcji globalnych,
-s nie wywołuje efektów.

GNU sort nie ma limitów co do długości linii ani ograniczeń co do
bajtów dozwolonych w linii. Dodatkowo, jeśli ostatni bajt pliku
wejściowego nie jest nową linią, GNU sort po cichu takową dostawia.
Kończący linię znak nowej linii w porównywaniu jest jej częścią. Na
przykład, bez opcji, przy sortowaniu ASCII, linia rozpoczynająca się
tabulacją zostanie umieszczona przed pustą linią, gdyż w porządku
leksykograficznym ASCII znak tabulacji poprzedza znak nowej linii.

Przy błędzie sort kończy pracę z kodem "2".

Jeśli ustawiono zmienną środowiskową TMPDIR, sort używa jej jako kata-
logu w którym należy umieścić pliki tymczasowe, zamiast domyślnego
/tmp. Opcja -T kat-tymcz jest jeszcze jednym sposobem wybrania kata-
logu dla plików tymczasowych; zastępuje ona ową zmienną środowiskową.

Poniższe opcje wpływają na porządkowanie linii wyjścia. Mogą być one
określone globalnie lub jako część konkretnego pola kluczowego. Jeśli
nie podano żadnego pola kluczowego, opcje globalne stosują się do
porównań całych linii; w przeciwnym razie opcje globalne są dziedzic-
zone przez pola kluczowe, dla których nie określono żadnych specjalnych
opcji. Opcje -b, -d, -f i -i klasyfikują znaki zgodnie z ustawieniami
narodowymi LC_CTYPE.

-b Ignoruje początkowe znaki puste podczas szukania kluczy sortowa-
nia w każdej linii.

-d Sortuje w porządku "książki telefonicznej": podczas sortowania
ignoruje wszystkie znaki oprócz liter, cyfr i znaków pustych.

-f Podstawia znaki małych liter za odpowiednie znaki dużych liter
podczas sortowania tak aby, na przykład, "b" sortowało się tak
samo jak "B".

-g Sortuje numerycznie, posługując się standardową funkcją C str-
tod, przekształcając przedrostek każdej linii na liczbę zmienno-
przecinkową podwójnej precyzji. Umożliwia to podawanie liczb
zmiennoprzecinkowych w notacji naukowej, jak "1.0e-34" czy
"10e100". Nie zgłasza nadmiaru, niedomiaru czy błędów konwersji.
Wykorzystuje następujący porządek leksykograficzny:

* linie nie rozpoczynające się liczbami (wszystkie uważane za
równe).

* wartości NaN ("Not a Number") w arytmetyce zmiennoprzecinkowej
IEEE w spójnej, ale zależnej od architektury komputera kole-
jności.

* minus nieskończoność.

* liczby skończone w kolejności rosnącej (z równymi -0 i +0).

* plus nieskończoność.

Opcji tej należy używać tylko wtedy, gdy nie ma innej alternatywy; jest
znacznie wolniejsza niż -n i przy konwersji na zmiennoprzecinkowe można
utracić informację.

-i Ignoruje znaki niedrukowalne (spoza zakresu ASCII 040-176
ósemkowo, włącznie) podczas sortowania.

-M Każdy początkowy łańcuch składający się z dowolnej ilości
białych znaków plus trzy litery będące skrótem nazwy miesiąca
jest zamieniany na DUŻE litery i porównywany w porządku "JAN" <
"FEB" < ... < "DEC." Przy porównywaniu nieprawidłowe nazwy są
mniejsze od poprawnych. Ustawienie narodowe LC_TIME wyznacza
pisownię nazw miesięcy.

-n Sortowanie numeryczne: każdą linię rozpoczyna liczba. Składają
się na nią opcjonalne białe znaki, opcjonalny znak -, oraz zero
lub więcej cyfr, które mogą być oddzielone separatorami tysięcy,
plus opcjonalnie występujący separator dziesiętny i zero lub
więcej cyfr dziesiętnych. Ustawienie narodowe LC_NUMERIC określa
znak separatora dziesiętnego i separatora tysięcy.

sort -n wykorzystuje coś, co może być uważane za niekonwencjon-
alną metodę porównywania łańcuchów reprezentujących liczby zmi-
ennoprzecinkowe. Zamiast najpierw zamieniać każdy łańcuch na typ
"double" języka C a następnie porównywać ich wartości, sort
wyrównuje znaki separatora dziesiętnego w dwu łańcuchach i
porównuje je znak po znaku. Jedną z korzyści z takiego podejścia
jest jego szybkość. W praktyce jest to o wiele wydajniejsze niż
wykonywanie dwu odpowiednich konwersji string-double (lub nawet
string-integer) i następnie porównywanie liczb podwójnej pre-
cyzji. Dodatkowo, nie występuje tu towarzysząca utrata
dokładności. Konwersja przed porównaniem każdego łańcucha na typ
"double" ograniczałaby dokładność do około 16 cyfr w większości
systemów.

Nie jest rozpoznawany ani początkowy znak "+", ani notacja
wykładnicza. Do porównywania numerycznego takich łańcuchów
należy użyć opcji -g.

-r Odwraca rezultat porównania, tak iż linie z większymi
wartościami klucza pojawiają się w wyniku wcześniej, a nie
później.

Inne opcje to:

-o plik-wyj
Wypisuje wynik do plik-wyj, a nie na standardowe wyjście. Jeśli
plik-wyj jest jednym z plików wejściowych, sort kopiuje go do
pliku tymczasowego przed sortowaniem i wypisaniem wyniku do
plik-wyj.

-t separator
Używa znaku separator jako separatora pól podczas szukania
kluczy sortowania w każdej linii. Domyślnie pola oddzielone są
łańcuchem pustym pomiędzy znakami nie będącymi białym znakiem i
białymi znakami. To znaczy, linię wejścia sort rozkłada na pola
" foo" i " bar". Separator pól nie jest uważany za część ani
pola, które go poprzedza ani tego, które po nim następuje.

-u W przypadku domyślnym lub opcji -m, wypisuje tylko pierwszą z
sekwencji linii porównanych jako równe. Dla opcji -c sprawdza
czy żadna para kolejnych linii w wyniku porównania nie jest
równa.

-k poz1[,poz2]
Zalecana, POSIX-owa składnia określania pól sortowania. Pole
jest częścią linii pomiędzy poz1 i poz2 (lub końcem linii, jeśli
pominięto poz2) w�ł�ącznie. Pola i pozycje znaków numerowane są
począwszy od 1. Zatem sortowanie według drugiego pola
wymagałoby "-k 2,2". Poniżej znajdziesz więcej przykładów.

-z Traktuje wejście jako zestaw linii zakończonych bajtem zerowym
(znak ASCII NUL (null)) a nie ASCII LF (koniec linii). Opcja ta
może być przydatna w połączeniu z `perl -0" lub `find -print0" i
`xargs -0", które robią to samo w celu niezawodnego zachowania
dowolnych nazw ścieżek (nawet zawierających znaki końca linii).

+poz1 [-poz2]
Przestarzała, tradycyjna opcja określania pól sortowania.
Określa pole w każdej linii, którego należy użyć jako klucza
sortowanie. Pole to składa się z części linii zaczynającej się
na poz1 aż do (ale nie włącznie z) poz2 (albo do końca linii
jeśli nie podano poz2). Pola i pozycje znaków numerowane są
począwszy od 0.

Pozycja w polu sortowania w opcjach -k i + ma postać f.c, gdzie f to
numer pola, które ma zostać użyte a c to numer pierwszego znaku od
początku pola (dla +poz) albo od końca poprzedniego pola (dla -poz).
Część .c pozycji może zostać pominięta; w tym przypadku uważa się ją za
oznaczającą pierwszy znak pola. Jeśli podano opcję -b, część .c
określenia pola liczona jest od pierwszego niepustego znaku pola (dla
+poz) lub ostatniego niepustego znaku stojącego po poprzednim polu (dla
-poz).

Argument +poz lub -poz może także zawierać dołączoną dowolną z liter
opcji Mbdfinr, wówczas dla tego konkretnego pola nie są używane glob-
alne opcje porządkowania. Opcja -b może być dołączona niezależnie do
jednej z lub obu części +poz i -poz określenia pola, a jeśli została
odziedziczona z opcji globalnych, zostanie dołączona do obydwu. Jeśli
użyto opcji -n lub -M, co zakłada opcję -b, opcja -b stosuje się do
zarówno do części +poz jak i -poz określenia pola. Klucze mogą się
rozciągać na kilka pól.

Dodatkowo, kiedy GNU sort wywołany został z dokładnie jednym argu-
mentem, rozpoznawane są następujące opcje:

--help Wyświetla informację o stosowaniu programu i dostępnych opcjach,
kończy pracę.

--version
Wyświetla numer wersji programu i kończy pracę.

ZGODNE Z
Historyczne (z BSD i System V) implementacje sort różniły się w inter-
pretacji niektórych opcji, szczególnie -b, -f, oraz -n. GNU sort
naśladuje zachowanie POSIXowe, które jest zwykle (ale nie zawsze!)
podobne do zachowania z System V. Według POSIX -n nie zakłada już -b.
Dla spójności, w ten sam sposób zmieniono -M. Może to wpłynąć na
znaczenie pozycji znaków w określeniach pól w pewnych zagmatwanych
przypadkach. Jeśli cię to gryzie, rozwiązaniem jest dodanie wyraźnej
opcji -b.

PRZYKŁADY
A oto nieco przykładów ilustrujących rozmaite kombinacje opcji. Do
określania kluczy sortowania wykorzystywana jest w nich POSIX-owa opcja
-k zamiast przestarzałej składni +poz1-poz2.

* Sortowanie w malejącej (odwrotnej) kolejności numerycznej:
sort -nr

* Sortowanie alfabetyczne, przy pominięciu pierwszych i drugich pól.
Posługuje się pojedynczym kluczem złożonym ze znaków od początku trze-
ciego pola do końca każdej linii:
sort -k3

* Sortowanie numeryczne według drugiego pola i rozstrzyganie przeszkód
przez sortowanie alfabetyczne wg trzeciego i czwartego znaku piątego
pola. Znakiem ograniczającym pola jest ":"
sort -t : -k 2,2n -k 5.3,5.4
Zauważ, że w przypadku napisania "-k 2" zamiast "-k 2,2", sort wyko-
rzystałby wszystkie znaki począwszy od drugiego pola, a skończywszy na
końcu linii jako pierwszy klucz numeryczny. W większości zastosowań,
traktowanie jako numeryczne kluczy złożonych z więcej niż jednego pola
nie daje oczekiwanego wyniku.

Zauważ też, że do określnika końca pola dla pierwszego klucza został
zastosowany modyfikator -n. Byłby równoważny podaniu "-k 2n,2" lub "-k
2n,2n". Wszystkie modyfikatory z wyjątkiem b odnoszą się do odnośnego
pola, niezależnie od tego czy są dołączone do określenia początku pola,
końca czy obu.

* Sortowanie pliku haseł według piątego pola, ignorowane są początkowe
białe znaki. Sortowanie linii z równymi wartościami piątego pola według
numerycznego identyfikatora użytkownika z pola trzeciego:
sort -t : -k 5b,5 -k 3,3n /etc/passwd
Alternatywą jest zastosowanie globalnego modyfikatora numerycznego -n:
sort -t : -n -k 5b,5 -k 3,3 /etc/passwd

* Utworzenie pliku znaczników (tags) w kolejności sortowania
niewrażliwej na wielkość liter:
find src -type f -print0 |
sort -t / -z -f | xargs -0 etags --append
Użycie w tym przypadku "-print0", "-z" i "-0" oznacza, że ścieżki zaw-
ierające znaki nowej linii nie będą rozbijane przez operację operację
sortowania.

* Na koniec: do zignorowania zarówno początkowych jak i końcowych
białych znaków można zastosować modyfikator b do końcowego określnika
pierwszego klucza
sort -t : -n -k 5b,5b -k 3,3 /etc/passwd
lub użyć globalnego modyfikatora -b zamiast -n i bezpośredniego n przy
określeniu drugiego klucza:
sort -t : -b -k 5,5 -k 3,3n /etc/passwd

UWAGI
Różne znaczenie numerów pól w zależności od użycia opcji -k stwarza
zamieszania. To wszystko wina POSIX!

ZGŁASZANIE BŁĘDÓW
Błędy proszę zgłaszać, w jęz. ang., do .

COPYRIGHT
Copyright (C) 1999 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is
NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.

ZOBACZ TAKŻE
uniq(1), comm(1), ptx(1), tsort(1), textutils(1).

OD TŁUMACZA
Zaktualizowano i poszerzono wg dokumentacji Texinfo dla narzędzi tek-
stowych GNU wersji 2.0.

Czy wiesz że? Jednym z najpopularniejszych programów do tworzenia wirtualnych sieci lan jest hamachi. Program dedykowany jest na platformę Windows.