ordene com -k maior que o número de chaves

0

Estou tentando entender um script existente usado em nosso projeto com o comando sort

sort -t= -nr -k3 nos 

Em que nos é um arquivo com espaços em branco e números, neste exemplo: 997 998 999 1000

A saída é

999
998
997
1000

O que não entendo é por que 1000 aparece por último. Eu suspeito que seja por causa do argumento -k3 quando há apenas uma chave para cada entrada, mas não consigo encontrar nada na documentação para dizer como ela se comporta quando a posição da chave especificada não existe.

Até os números de 4 dígitos foram incluídos no arquivo, isso deu o resultado esperado de classificar os números decrescentes numericamente.

    
por Chris R 18.10.2018 / 18:47

1 resposta

3

Quando você especifica um campo de classificação que não existe, a chave de classificação ficará vazia para cada comparação que o sort fizer. Isso significa que as chaves irão comparar igual, sempre. Isso aciona uma parte da especificação padrão de sort que diz que o linha inteira deve ser usada como chave de classificação e que nenhuma das opções -d , -f , -i , -n ou -k permaneça em vigor.

Isso, por sua vez, significa que o comando será idêntico ao

sort -r nos

que faz uma classificação lexicográfica reversa dos dados (o -t= não tem efeito aqui). 997 precede 1000 na ordem lexicográfica reversa, pois 9 é solicitado antes de 1 .

O bit relevante do padrão POSIX:

-k keydef

[...]

Except when the -u option is specified, lines that otherwise compare equal shall be ordered as if none of the options -d, -f, -i, -n, or -k were present (but with -r still in effect, if it was specified) and with all bytes in the lines significant to the comparison. The order in which lines that still compare equal are written is unspecified

    
por 18.10.2018 / 22:52

Tags