'sort' desconsidera o ponto de interrogação [duplicado]

1

Eu preciso classificar um arquivo com base nos nomes da primeira coluna. Alguns dos nomes terminam em um ponto de interrogação. sort persistentemente ignora esse ponto de interrogação durante a classificação:

sort -k 1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a?,1
a,2
b,1
b?,2

Eu realmente não me importo como sort ordena o ponto de interrogação, se ele apenas o fez consistentemente . Mas não parece, ao invés disso, considerar a segunda coluna, mesmo se eu disser sort explicitamente apenas para usar a primeira coluna como chave.

Informação da versão:

$ sort --version
sort (GNU coreutils) 8.22
Packaged by Gentoo (8.22 (p1.0))
A propósito, no OS X 10.9 (onde sort se identifica como “sort (GNU coreutils) 5.93”), o acima funciona como esperado para mim.

    
por Konrad Rudolph 16.05.2014 / 15:45

1 resposta

2

Usar LC_ALL=C parece dar os resultados corretos para mim na classificação 8.21.

$ LC_ALL=C sort -k1,1 -t , sample.txt     
a,2
a?,1
b,1
b?,2

Ou como você escreveu:

$ cat | LC_ALL=C sort -k1,1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a,2
a?,1
b,1
b?,2

Por acaso você não precisa do cat :

$ LC_ALL=C sort -k1,1 -t , <<TEST
a?,1
a,2
b?,2
b,1
TEST
a,2
a?,1
b,1
b?,2

LC_COLLATE=C funciona para mim também.

Sobre o uso de sort -k1 vs. sort -k1,1

Os exemplos acima usam uma versão modificada do comando sort para usar -k1,1 em vez de apenas -k 1 , pois isso levará a problemas de classificação com outros caracteres especiais, como % .

com apenas -k1 :

$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1    
a
a%,foo
a,bar

com -k1,1 :

$ printf '%s\n' a a%,foo a,bar | LC_ALL=C sort -t, -k1,1
a
a,bar
a%,foo
    
por 16.05.2014 / 15:55

Tags