Eu recomendo este tópico de estouro de pilha no mesmo tópico. Esse comportamento de ordenação não é intuitivo, e apesar de estudar tanto esse thread quanto a documentação oficial do GNU Sort Não consigo determinar exatamente o que acontece quando um índice de classificação está fora dos limites.
-
No entanto, devo salientar que você pode usar o modificador "b" como uma espécie key opt que ignora os espaços em branco nessa chave, ou seja, chaves em branco, por exemplo
$ sort -k teste 2.3nb
-
Também da documentação do GNU Sort , fica claro a opção -k leva um argumento do formato start pos , end pos e se não end pos é especificado compara as chaves da sua posição inicial até o final da linha atual . Isso, junto com o seguinte cuidado, é o que resulta no comportamento indefinido.
Finally, as a last resort when all keys compare equal, sort compares entire lines as if no ordering options other than --reverse (-r) were specified.
-
Você também pode especificar várias chaves para atuar como um desempatador, embora isso não resolva seu caso de uso porque é a primeira chave que está causando o comportamento não intuitivo.
-
Finalmente, se você tiver a opção --debug disponível em seu sistema como por GNU Sort, isso ajudaria muito na solução de problemas, pois revela o que está sendo combinado com o padrão de chave. Infelizmente eu não fiz e então tive que experimentar no escuro.
Eu não sei exatamente qual é o seu caso de uso, mas encontrei um resultado bastante satisfatório com o seguinte. Esse comportamento provavelmente não está documentado , mas parece que funciona de acordo com minha intuição e sua solicitação:
$ sort -k 2.3nb,2 test
11 2
11 2 25
11 22
12 22 33
33
33 2 1
33 22 33
222 331
111 222
111 223