nekonzistentní chování sort

hlasů
2

Mám ukázkový soubor containg znaky „aA0_-“ na každé z nich na jeden. Třídění jej pomocí GNU druh vydává tento řazení:

$ cat /tmp/sample | sort

_
-
0
a
A

Po připojí nějaký jiný charakter, získáme jiné pořadí (non-alfanumerické znaky vypadá, že má nižší prioritu):

$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
 x
_x
-x

zatímco když vložíme tento znak na začátku, získáme původní řazení:

$ cat /tmp/sample | sed 's/^/x/' | sort
x 
x_
x-
x0
xa
xA

.. Co je vysvětlení takového chování?

AKTUALIZACE

když ‚ z‘ a ‚ Z‘ znaky jsou zahrnuty do vzorku, výsledek se zdá ještě sranger:

$ cat /tmp/sample | sed 's/$/x/' | sort
0x
ax
Ax
 x
_x
-x
zx
Zx

.. ale s ohledem na správnou odpověď, je to proto, že všechny ‚ ‘, ‚ _‘ a ‚ -‘ jsou mezery v aktuálním locale (en_US.UTF-8) a nejsou ignorovány v třídění.

Položena 18/07/2010 v 01:00
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
4

Soubor locale by měla obsahovat definici LC_COLLATE. To určuje pořadí řazení znaků. Také zkontrolujte definici LC_CTYPE, a které znaky jsou klasifikovány jako ‚prostor‘.

-li ‚-‘ a ‚_‘ jsou klasifikovány jako prostor, můžete najít výsledky, které ukázaly.

Odpovězeno 18/07/2010 v 01:15
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more