2010-07-18 8 views
2

J'ai un exemple de fichier contenant des caractères "aA0_-" sur chacun d'eux. Le tri à l'aide de tri GNU donne l'ordre de tri suivant:comportement de tri incohérent

$ cat /tmp/sample | sort 

_ 
- 
0 
a 
A 

après annexant un autre caractère, on obtient un ordre différent (les caractères non-alphanumériques semble avoir une priorité inférieure):

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

tandis que lorsque nous insérons ce caractère au début, nous obtenons l'ordre de tri d'origine:

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

.. quelle est l'explication d'un tel comportement?

MISE À JOUR

quand 'z' et caractères '' Z sont inclus dans l'échantillon, le résultat semble encore sranger:

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

.. mais à la lumière de la réponse correcte, c'est parce que tous les '', '_' et '-' sont des espaces dans les paramètres régionaux actuels (en_US.UTF-8) et ne sont pas ignorés dans le tri.

+0

Quelle est votre locale? –

+0

@ [Sanjay Manohar] locale est en_US.UTF-8. hmm, bon indice;) – mykhal

Répondre

4

Votre fichier de paramètres régionaux doit contenir une définition de LC_COLLATE. Ceci détermine l'ordre de tri des caractères. Vérifiez également la définition de LC_CTYPE et les caractères qui sont classés comme "espace".

Si '-' et '_' sont classés comme espaces, vous pourriez trouver les résultats que vous avez affichés.

Questions connexes