Como ordenar linhas que contenham “_” numericamente?

6

Aqui está um subconjunto dos nomes dos arquivos no meu arquivo:

profile_10_1_1
profile_10_1_2
profile_1_1_1

Estou tentando classificá-los numericamente em ordem crescente, começando de 1 em diante. Eu usei o seguinte comando

sort -n filename

e também tentei isso:

sort -nk filename

Mas aqueles com 10 estarão sempre no topo da lista.

Como escrevo um comando para obter essa saída desejada:

profile_1_1_1
profile_1_1_2
....
profile_9_1_1
....
profile_10_1_1
    
por cwmwl 18.05.2015 / 12:45

2 respostas

5

FreeBSD e GNU sort tem uma opção -V para isso.

sort -V < filename

O GNU ls tem uma opção -v . Então, se esses arquivos existem, você poderia fazer:

xargs -d '\n' < filename ls -dv --

zsh possui sinalizadores de expansão de parâmetro para classificar matrizes numericamente:

printf '%s\n' ${(fno)"$(<filename)"}

Caso contrário, portably, você teria que fazer assim:

sort -t_ -k1,1 -k2,2n -k3,3n -k4,4n -k5,5n filename
    
por 18.05.2015 / 12:57
2

-V faz exatamente o que você quer.

-V, --version-sort
              natural sort of (version) numbers within text

Funciona pelo menos no GNU sort .

    
por 18.05.2015 / 12:57

Tags