O gnu coreutils está quebrado?

9

Considere a seguinte entrada para classificar:

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

Agora, tente executar sort foo

A saída não é classificada ao tentar isso em qualquer uma das minhas caixas linux (gnu coreutils versões 6.9-7.4). A saída é classificada quando executada em cygwin (gnu coretuils 8.5). Comentários?

    
por Leo Alekseyev 30.11.2010 / 01:24

1 resposta

16

A classificação depende da localidade; Especificamente, isso depende de $LC_COLLATE (possivelmente substituído por $LC_ALL ), retornando para $LANG se ele não existir. O comando locale mostrará com quais valores você está trabalhando efetivamente. Consulte man 3 strcoll , man 3 setlocale , etc.

LC_COLLATE=C (ou POSIX ou nenhuma localidade) resulta em uma comparação estrita de byte a byte.

LC_COLLATE=en_US.utf8 resulta em uma classificação de equivalência alfabética, com pontuação ignorada e caracteres dentro da mesma classe de equivalência tratados igualmente.

    
por 30.11.2010 / 01:39