Comportamento incorreto do comando sort?

13

Eu tentei classificar o conteúdo de um arquivo em desktop do Ubuntu 14.04 (Trusty Tahr). No meu caso, o resultado esperado deve ser o mesmo que o conteúdo original, mas o resultado real não é. Por quê?

# cat test.txt
a++-a
a++-b
a++-c
ab
ac
# cat test.txt | sort
a++-a
ab
a++-b
ac
a++-c
    
por user2909884 17.03.2015 / 16:10

2 respostas

16

Você pode usar a variável LC_ALL , configurá-la para LC_ALL=C antes de chamar sort

$ LC_ALL=C sort test.txt
a++-a
a++-b
a++-c
ab
ac

Leia esta resposta, se você quiser saber o que é isso magicamente LC_ALL=C . Aqui está um breve resumo:

% bl0ck_qu0te%

Além disso, como @KenMollerup apontou, cite man sort

   ***  WARNING  ***  The locale specified by the environment affects sort
   order.  Set LC_ALL=C to get the traditional sort order that uses native
   byte values.

Portanto, ao usar a classificação com LC_ALL=C , classifique os símbolos por byte. Caso contrário, sort ignorará todos os caracteres não alfanuméricos.

    
por c0rp 17.03.2015 / 16:29
7

O Sort usa a classificação alfabética e numérica, o mesmo que nós, caracteres especiais como + - < > ... são ignorados, números são tratados numéricos, então 1, 2, 3 .. vem antes de 11, 12 1066 1104 - veja!

Portanto, sua lista é vista como: aa, ab, ab, ac, ac

    
por Ken Mollerup 17.03.2015 / 16:19