Resultado inesperado do comando sort do linux bash

0

Eu tenho um arquivo foo.txt com este conteúdo:

chr1    15
chr11   5
chr11   8
chr1    7
chr2    23
chr1    35

Eu tentei classificá-lo primeiro de acordo com a primeira coluna, e depois de acordo com a segunda coluna para quebrar os laços com o seguinte comando no shell do linux:

sort -k 1,1 -k 2,2n foo.txt

Mas o resultado é estranho:

chr1    7
chr1    15
chr11   5
chr11   8
chr1    35
chr2    23

O que eu esperava era isso:

chr1    7
chr1    15
chr1    35
chr11   5
chr11   8
chr2    23

EDITAR Eu verifiquei os caracteres no arquivo com od -fc foo.txt , como sugerido nos comentários, não havia caracteres estranhos. Aqui está o resultado:

0000000   3.5274972e-09   8.7240555e-33   3.5274972e-09    8.716562e-33
          c   h   r   1  \t   1   5  \n   c   h   r   1   1  \t   5  \n
0000020   3.5274972e-09   8.8610065e-33   3.5274972e-09   2.5496164e+21
          c   h   r   1   1  \t   8  \n   c   h   r   1  \t   7  \n   c
0000040   2.1479764e-33   2.5493397e+21   2.1359394e-33     9.37439e-40
          h   r   2  \t   2   3  \n   c   h   r   1  \t   3   5  \n
0000057

Estou usando sort (GNU coreutils) 8.21 Alguma idéia?

    
por Ali 22.10.2014 / 22:53

1 resposta

1

Parece que as preferências de classificação do seu local estão relacionadas ao problema. Você pode especificá-lo em seu ambiente, então qualquer comando que o use (incluindo sort ) irá obedecê-lo:

export LC_COLLATE=C
sort -k 1,1 -k 2,2n foo.txt

Ou você pode especificar esse valor apenas pela duração do próprio tipo

LC_COLLATE=C sort -k 1,1 -k 2,2n foo.txt       # or
env LC_COLLATE=C sort -k 1,1 -k 2,2n foo.txt
    
por 23.10.2014 / 01:21