Como ordenar dois campos de números

1

Eu tenho uma lista de nomes de arquivo assim:

epdb_0_0.pdb
epdb_0_10.pdb
epdb_0_11.pdb
epdb_0_12.pdb
epdb_0_13.pdb
epdb_0_14.pdb
epdb_0_15.pdb
epdb_0_16.pdb
epdb_0_17.pdb
epdb_0_18.pdb
epdb_0_19.pdb
epdb_0_1.pdb
epdb_0_20.pdb
epdb_0_21.pdb
epdb_0_22.pdb
epdb_0_23.pdb
epdb_0_24.pdb
epdb_0_25.pdb
epdb_0_26.pdb
epdb_0_27.pdb
epdb_0_28.pdb
epdb_0_29.pdb
epdb_0_2.pdb
epdb_0_30.pdb
...

Como eu uso o comando de ordenação Unix para que a lista se pareça com:

epdb_0_0.pdb
epdb_0_1.pdb
epdb_0_2.pdb
...
epdb_0_10.pdb
epdb_0_11.pdb
epdb_0_12.pdb
epdb_0_13.pdb
epdb_0_14.pdb
epdb_0_15.pdb
epdb_0_16.pdb
epdb_0_17.pdb
...
epdb_1_0.pdb
epdb_1_2.pdb
epdb_1_3.pdb
...

Eu sei que é uma espécie de uso do --key= flag , possivelmente na combinação iwht -n or -g , mas não consigo fazer funcionar.

    
por Doug97 12.11.2014 / 10:41

5 respostas

0

Tente:

sort -t "_" -k2 -k3 -g <filename>

-t "_" - o separador de campo é _

-k2 - 1ª classificação na segunda coluna

-k3 - depois classifique na terceira coluna

-g - tipo numérico geral

    
por 12.11.2014 / 10:52
2

Em vez de tentar classificar uma lista de nomes de arquivos de uma maneira específica, você pode usar:

ls -1v *.pdb

para listar os arquivos na ordem necessária em primeiro lugar.

    
por 12.11.2014 / 11:49
1

Pode fazer assim:

$ cat file.txt | sort -t"_" | sort -n -k3 -t"_"
  • file.txt contém a primeira lista não classificada.

Felicidades.

    
por 12.11.2014 / 10:47
0

Tente:

sort -t_ -k3n
  • -t_ : define o separador de campo para _
  • -k3n : classifica numericamente no campo 3 rd ( n )
por 12.11.2014 / 10:46
0
sort -V

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

    
por 12.11.2014 / 10:47

Tags