Como o utilitário “sort” funciona? (por que não funciona do jeito que eu acho que deveria?) [duplicado]

3

Eu tenho 2 arquivos de texto:

$ cat /tmp/test1
"AAP" bar
"AEM" bar
"AA" bar
"AEO" bar
"A" bar

$ cat /tmp/test2
"AEM" foo
"AAP" foo
"A" foo
"AEO" foo
"AA" foo

Eu quero ordená-los

$ sort /tmp/test1
"AA" bar
"AAP" bar
"A" bar              <-- "A" is in position 3
"AEM" bar
"AEO" bar

$ sort /tmp/test2
"AA" foo
"AAP" foo
"AEM" foo
"AEO" foo
"A" foo              <-- "A" is in position 5

Por que "A" acaba na posição 3 em /tmp/test1 e na posição 5 em /tmp/test2 ?

Minha expectativa é que cada caractere por coluna seja comparado.

Assim, ao comparar a coluna 3, 'A' , 'E' e '"' serão comparados um contra o outro, e isso seria o determinante final na ordem final de classificação desses dados de teste.

Claramente, minha expectativa está errada, então como sort funciona, se não da maneira que eu esperava?

Existe uma opção de linha de comando para sort ou algum outro utilitário que eu possa usar para obter a ordem de classificação desejada?

    
por Steve Lorimer 05.11.2015 / 18:27

2 respostas

7

Você precisa ter a localidade de agrupamento alterada. O comportamento que você descreve é típico de en_US e muitos outros locais. Corrigir com:

LC_ALL=C   sort  /tmp/test1

Mais nesta resposta: link

    
por 05.11.2015 / 19:08
5

Possivelmente, só olha para caracteres alfabéticos? Portanto, no caso de A , o próximo caractere alfabético é o b da barra.

    
por 05.11.2015 / 18:46

Tags