Comment sortinger les lignes qui contiennent "_" numériquement?

Voici un sous-set des noms de files dans mon file:

profile_10_1_1 profile_10_1_2 profile_1_1_1 

J'essaie de les sortinger numériquement par ordre croissant, à partir de 1. J'ai utilisé la command suivante

 sort -n filename 

et a également essayé ceci:

 sort -nk filename 

Mais ceux avec 10 seront toujours au sumt de la list.

Comment écrire une command pour get cette sortie désirée:

 profile_1_1_1 profile_1_1_2 .... profile_9_1_1 .... profile_10_1_1 

FreeBSD et GNU -V une option -V pour cela.

 sort -V < filename 

GNU ls a une option -v . Donc, si ces files existent, vous pourriez faire:

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

zsh a des indicateurs d'expansion de paramètre pour sortinger les arrays numériquement:

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

Sinon, de manière portable, vous auriez à le faire comme:

 sort -t_ -k1,1 -k2,2n -k3,3n -k4,4n -k5,5n filename 

-V fait exactement ce que tu veux.

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

Fonctionne au less en GNU.