Por que as saídas de 'sort', 'sort k 1', 'sort k 1,1' são iguais?

3

Eu tenho um arquivo:

$ cat file
1 c
8 a
1 b
5 f

Acho que o comando sort no início compara o primeiro campo de todas as linhas e classifica-as para essas linhas terem campos iguais e começa a classificação novamente para os segundos campos como este:

$sort file
1 b
1 c
5 f
8 a

Eu li sobre a diferença entre as opções k 1 e k 1,1 : com k 1 é possível que a chave de ordenação continue até o final da linha, mas com k 1,1 ela deve classificar apenas o primeiro campo sem considerar outros campos, mas:

$sort -k 1 file
1 b
1 c
5 f
8 a

$sort -k 1,1 file
1 b
1 c
5 f
8 a

Por que as saídas de sort = sort k 1 = sort k 1,1 são iguais?

Acho que a saída de sort k 1,1 file deve ser

1 c 
1 b
5 f
8 a

Se não estiver correto, por favor, diga-me qual é o meu erro e como posso obter resultados assim?

    
por Sinoosh 08.10.2016 / 10:49

2 respostas

7

De info sort

   Many options affect how ‘sort’ compares lines; if the results are
unexpected, try the ‘--debug’ option to see what happened.  A pair of
lines is compared as follows: ‘sort’ compares each pair of fields, in
the order specified on the command line, according to the associated
ordering options, until a difference is found or no fields are left.  If
no key fields are specified, ‘sort’ uses a default key of the entire
line.  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.  The ‘--stable’ (‘-s’) option disables this
“last-resort comparison” so that lines in which all fields compare equal
are left in their original relative order.  The ‘--unique’ (‘-u’) option
also disables the last-resort comparison.

Então, para alcançar o resultado desejado (tendo em mente que seu primeiro campo é numérico)

$ sort -s -k1,1n file
1 c
1 b
5 f
8 a
    
por steeldriver 08.10.2016 / 11:00
3

Se você quiser que a segunda coluna seja invertida (não é uma resposta adequada à sua pergunta específica, mas talvez seja o que você está interessado), elaborando um pouco de Unix StackExchange obtém-se:

sort -k1,1n -k2,2r file
    
por dadexix86 08.10.2016 / 11:07