Quando 'sort -k 2,3b' e 'sort -k 2,3' diferem?

3

A descrição POSIX do sinal -b do comando sort é

Ignore leading characters when determining the starting and ending positions of a restricted sort key.

Eu posso entender o uso da posição inicial da chave, mas e as posições finais? Alguém pode dar um exemplo?

Por exemplo, com o locale configurado para POSIX, o arquivo com o conteúdo

x  z
x a

seria classificado de maneira diferente em sort -k 2 e sort -k 2b , mas não consegui apresentar um caso em que, digamos, sort -k 2,3b e sort -k 2,3 fizessem a diferença.

    
por ezequiel-garzon 24.10.2013 / 10:14

2 respostas

3

Tem efeito quando você adiciona reverso à comparação. A ordem de precedência é alterada, pois em -r apenas se aplica à comparação de último recurso .

Sem reversão:

$ sort -k 1,2 sample
A  34
A 33

$ sort -k 1,2b sample
A  34
A 33

Reverse:

$ sort -rk 1,2 sample
A 33
A  34

$ sort -rk 1,2b sample
A  34
A 33
    
por 24.10.2013 / 14:47
3

No caso de alguém mais estar curioso sobre isso ... e por acaso encontrar essa questão, a menção do --debug do Sukminder no GNU sort me ajudou a encontrar uma resposta para riscar essa coceira. Suponha, como um exemplo reconhecidamente planejado, que você queira classificar este arquivo formatado de forma descuidada:

x   FRA-Paris    Pierre
x ESP-Barcelona   Jordi
x     FRA-Nice  Charles
x    FRA-Toulouse Nicole
x   ESP-Seville  Javier
x    ESP-Madrid  Carlos

para isso:

x    ESP-Madrid  Carlos
x   ESP-Seville  Javier
x ESP-Barcelona   Jordi
x     FRA-Nice  Charles
x    FRA-Toulouse Nicole
x   FRA-Paris    Pierre

Ou seja, apenas prestando atenção ao país no segundo campo e depois ao nome da pessoa, no terceiro campo. Queremos considerar os três primeiros caracteres do segundo campo, e é importante ignorar os espaços em branco iniciais ao determinar o primeiro caractere e o terceiro caractere.

O comando sort -k 2b,2.3b -k 3b funcionaria, mas sort -k 2b,2.3 -k 3b não funcionaria. Deve ser dito que, neste caso, o caminho mais natural seria aplicar uma opção global -b , simplesmente como sort -bk 2,2.3 -k 3 .

    
por 27.10.2013 / 00:12