¿Gnu coreutils está roto?

10

Considere la siguiente entrada para ordenar:

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

Ahora intenta correr sort foo

La salida no se ordena al intentar esto en cualquiera de mis cajas de Linux (gnu coreutils versiones 6.9-7.4). La salida se ordena cuando se ejecuta bajo cygwin (gnu coretuils 8.5). Comentarios?

Leo Alekseyev
fuente

Respuestas:

18

La clasificación depende de la configuración regional; específicamente, depende de $LC_COLLATE(posiblemente anulado por $LC_ALL), recurriendo a $LANGsi no existe. El comando localele mostrará con qué valores está trabajando efectivamente. Ver man 3 strcoll, man 3 setlocale, etc.

LC_COLLATE=C(o POSIXninguna configuración regional) da como resultado una estricta comparación byte por byte.

LC_COLLATE=en_US.utf8 da como resultado una clasificación de equivalencia alfabética, con puntuación ignorada y caracteres dentro de la misma clase de equivalencia tratados por igual.

efímero
fuente
De hecho, la export LC_COLLATE=Cordenación se comporta como se esperaba
Leo Alekseyev, el
3
Los acentos no se ignoran por completo. Stephaneordena antes Stéphane , pero Stephanieordena después Stéphane. ées equivalente a e(como ê, ë, ...), pero si hay un empate, entonces el orden entre los que está bien definido. Es lo mismo en un buen diccionario de papel viejo.
Stéphane Chazelas
Si realmente quieres saberlo todo: unicode.org/reports/tr10
Martin Tournoij