This is an old revision of the document!
Table of Contents
Záludné chování či chyby základních programů
sort
Nastavení locale ovlivňuje výsledek
sort
je známý tím, že třídí různě podle toho, jak máte nastavené locale
. Jestli třídění proběhne korektně česky v českém locale jsem nestudoval.
Takto sort
přesvědčíte, aby třídil podle bytů (čísel znaků), nikoli podle nějaké interpretace, jak asi vypadá obrázek písmene toho čísla:
env LC_ALL=C sort < vstup > výstup
Nastavení je dobré i pro případy, kdy vaše řádky obsahují různé symboly. Ukázkový rozdíl:
08:56$ sort < clipin ahoj <ahoj "ahoj 08:56$ env LC_ALL=C sort < clipin "ahoj <ahoj ahoj
Kódování souboru může vést ke špatným výsledkům
Pokud máte na konzoli UTF-8 a soubor clipin
v ISO-8859-2, může vás sort -u
nemile překvapit: neodliší ě
od š
nebo č
.
23:01 sol8 ~$ iconv -f latin2 -t utf8 < clipin ě š ě č 23:01 sol8 ~$sort -u < clipin | iconv -f latin2 -t utf8 ě 23:00 sol8 ~$env LC_ALL=C sort -u < clipin | iconv -f latin2 -t utf8 š č ě
iconv
jsem ve všech případech přidal, abych na konzoli vypsal soubor v UTF-8, jak konzole čeká.
uniq
Stejně jako sort
, i uniq
podléhá locale.
Stejně jako sort
, i uniq
se divně chová k souborům v nějakém kódování. (Ano, rozumíte správně, opravdu říkám, že uniq se chová divně ke všem souborům )