Bug de classificação ou mal-entendido

Bug de classificação ou mal-entendido

Suponha que eu tenha esse arquivo

b 10 foo
a 10 bar
a 2 bar

Quero classificar pela terceira coluna, em ordem alfabética. Em caso de empate, quero ordenar pela segunda coluna, numericamente. Na página de manual do programa unix sort, você encontra isto:

> sort -k3 -k2n a

Que dá

a 2 bar
a 10 bar
b 10 foo

Qual é correto.

Agora, o que eu realmente quero é ordenar pela primeira coluna, em ordem alfabética, e em caso de empate, pela segunda coluna, numericamente. Alguém pode me explicar por que

> sort -k1 -k2n a

a 10 bar
a 2 bar
b 10 foo

O que está totalmente errado?

Responder1

A razão pela qual seu exemplo não funciona como esperado é que sortconsidera todas as posiçõesdepoiso especificado também. No seu exemplo, o dicionário classifica -k1a string a 10 barantes a 2 bare você não precisa de um desempate.

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

   -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

informação relacionada