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
Dá
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 sort
considera todas as posiçõesdepoiso especificado também. No seu exemplo, o dicionário classifica -k1
a string a 10 bar
antes 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 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