¿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?

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.