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
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.
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.
Pode fazer assim:
$ cat file.txt | sort -t"_" | sort -n -k3 -t"_"
Felicidades.
Tente:
sort -t_ -k3n
-t_
: define o separador de campo para _
-k3n
: classifica numericamente no campo 3
rd ( n
) sort -V
-V, --version-sort natural sort of (version) numbers within text