Qual é a estratégia usada pelo tipo quando o campo não é encontrado?

0

Eu tenho um arquivo chamado test, seu conteúdo é como

111 222
11 22
111 223
12 22 33
11 2 25
222 331
11 2
33 2 1
33
33 22 33

Eu usei:

sort -bk2.3 test

Mas o resultado me confundiu, aquelas linhas que não possuem k2.3 são de um tipo bastante aleatório. Estou esperando que as linhas de destino sejam listadas no começo ou no final, mas não é. É como:

11 2
11 22
33
222 331
33 2 1
111 222
11 2 25
111 223
12 22 33
33 22 33

Então, qual é o mecanismo interno de classificação para classificar essas linhas sem uma área chave reivindicada?

    
por Zen 16.06.2014 / 12:28

1 resposta

1

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.

  1. 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

  2. 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. 
    
  3. 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.

  4. 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
    
por 17.06.2014 / 12:40