Bug em espécie ou mal-entendido

3

Suponha que eu tenha este arquivo

b 10 foo
a 10 bar
a 2 bar

Eu quero classificar pela terceira coluna, alfabeticamente. No caso de empates, eu quero classificar pela segunda coluna, numericamente. Na página man do programa de ordenação unix você encontra isto:

> sort -k3 -k2n a

O que dá

a 2 bar
a 10 bar
b 10 foo

O que está correto.

Agora, o que eu realmente quero, é classificar pela primeira coluna, alfabeticamente, e no caso de empates, pela segunda coluna, numericamente. Alguém pode me explicar por que

> sort -k1 -k2n a

a 10 bar
a 2 bar
b 10 foo

Qual é claramente errado?

    
por gaston 09.11.2012 / 18:06

1 resposta

2

O motivo pelo qual seu exemplo não funciona como esperado é que sort considere todas as posições após a especificada também. No seu exemplo, o tipo de dicionário -k1 classifica a string a 10 bar antes de a 2 bar e você não precisa de um desempate.

Você precisa especificar explicitamente os limites da chave de classificação, conforme descrito na man page:

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)

Exemplo:

$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo
    
por 09.11.2012 / 19:21

Tags