Gnu coreutils est-il cassé?


10

Tenez compte de l'entrée suivante pour trier:

cat > foo <<EOM
D,,5014978
DD,,25
D,I,1972765530
D,Y,4223624
-,Y,71285059
YA,I,2
EOM

Maintenant, essayez de courir sort foo

La sortie n'est pas triée lorsque j'essaye ceci sur aucune de mes boîtes Linux (gnu coreutils versions 6.9-7.4). La sortie est triée lorsqu'elle est exécutée sous cygwin (gnu coretuils 8.5). Commentaires?

Réponses:


18

Le tri dépend des paramètres régionaux; en particulier, cela dépend de $LC_COLLATE(éventuellement remplacé par $LC_ALL), retombant $LANGs'il n'existe pas. La commande localevous montrera les valeurs avec lesquelles vous travaillez efficacement. Voir man 3 strcoll, man 3 setlocaleetc.

LC_COLLATE=C(ou POSIXpas de paramètres régionaux du tout) entraîne une comparaison stricte octet par octet.

LC_COLLATE=en_US.utf8 entraîne un tri d'équivalence alphabétique, la ponctuation étant ignorée et les caractères de la même classe d'équivalence traités de manière égale.


En effet, export LC_COLLATE=Cfait se comporter comme prévu
Leo Alekseyev

3
Les accents ne sont pas complètement ignorés. Stephanetrie avant Stéphane , mais Stephanietrie après Stéphane. éest équivalent à e(comme ê, ë, ...), mais s'il y a égalité, l'ordre entre ceux est bien défini. C'est la même chose dans un bon vieux dictionnaire papier.
Stéphane Chazelas

Si vous voulez vraiment tout savoir: unicode.org/reports/tr10
Martin Tournoij
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.