bash sort não está classificando numericamente no campo conforme desejado

0

Estou tentando fazer uma classificação numérica em uma lista de nomes de arquivos.

Eles são todos nomeados como

something.txt~NUM~

Eu tentei classificá-los por

sort -t "~" -k1 -k2n

Mas o tipo sai errado. Se eu fizer

sort -n

Em seguida, eles são classificados numericamente conforme desejado, mas as alças de arquivo não são classificadas.

Aqui está um arquivo de teste

explanation.txt.~1~
explanation.txt.~2~
explanation.txt.~3~
explanation.txt.~4~
explanation.txt.~5~
explanation.txt.~6~
explanation.txt.~7~
explanation.txt.~8~
explanation.txt.~9~
explanation.txt.~11~
explanation.txt.~12~
explanation.txt.~13~
explanation.txt.~14~
explanation.txt.~15~
explanation.txt.~16~
explanation.txt.~17~
explanation.txt.~18~
explanation.txt.~19~
explanation.txt.~20~
presentation.txt.~10~
presentation.txt.~11~
presentation.txt.~12~
presentation.txt.~13~
presentation.txt.~14~
presentation.txt.~15~
presentation.txt.~16~
presentation.txt.~17~
presentation.txt.~18~
presentation.txt.~19~
presentation.txt.~1~
presentation.txt.~20~
presentation.txt.~21~
presentation.txt.~22~
presentation.txt.~2~
presentation.txt.~3~
presentation.txt.~4~
presentation.txt.~5~
presentation.txt.~6~
presentation.txt.~7~
presentation.txt.~8~
presentation.txt.~9~

que é classificado como

explanation.txt.~11~
explanation.txt.~12~
explanation.txt.~13~
explanation.txt.~14~
explanation.txt.~15~
explanation.txt.~16~
explanation.txt.~17~
explanation.txt.~18~
explanation.txt.~19~
explanation.txt.~1~
explanation.txt.~20~
explanation.txt.~2~
explanation.txt.~3~
explanation.txt.~4~
explanation.txt.~5~
explanation.txt.~6~
explanation.txt.~7~
explanation.txt.~8~
explanation.txt.~9~
presentation.txt.~10~
presentation.txt.~11~
presentation.txt.~12~
presentation.txt.~13~
presentation.txt.~14~
presentation.txt.~15~
presentation.txt.~16~
presentation.txt.~17~
presentation.txt.~18~
presentation.txt.~19~
presentation.txt.~1~
presentation.txt.~20~
presentation.txt.~21~
presentation.txt.~22~
presentation.txt.~2~
presentation.txt.~3~
presentation.txt.~4~
presentation.txt.~5~
presentation.txt.~6~
presentation.txt.~7~
presentation.txt.~8~
presentation.txt.~9~

Estou executando o Sierra OSX. Então, em particular, sort -V não está disponível para mim. Eu também sei como obter o resultado desejado usando um script perl. Então, não é uma questão de como obter o resultado desejado, mas como fazer isso usando 'sort'.

    
por A.Ellett 16.11.2017 / 19:54

1 resposta

2

Você primeiro quer classificar somente pelo campo 1 e, em seguida, no caso de empates, ver o campo 2:

sort -t'~' -k1,1 -k2,2n

Quando você usa -k1 , está classificando pelo campo 1 até o fim da linha. Quando você faz isso, não há empates, então a classificação pelo campo 2 nunca entra em ação.

    
por 16.11.2017 / 20:31

Tags