2017-09-15 3 views
0

j'ai un fichier comme ceci:bash numéros de tri avec décimales

1.1 
3.2 
1.2 
1.10 

Je voudrais trier le fichier afin qu'il ressemble à ceci:

1.1 
1.2 
1.10 
3.2 

En d'autres termes, 1.10 est plus que 1,2

J'ai essayé:

sort -nk 1,1 file 

Mais je continue à recevoir ce qui est pas ce que je veux

1.1 
1.10 
1.2 
3.2 

Merci

+1

sur Linux (ou, plus précisément, avec GNU 'sort'), il y a une option' '-g' ou --Le-numérique-sort'. Je n'ai pas joué avec ça. –

+1

À la réflexion, vous ne voulez pas traiter la valeur comme un nombre, car numériquement, 1,10 est le même que 1,1 et est plus petit que 1,2. Donc, l'option '-g' n'est d'aucune aide. L'option '-V' traite les composants en tant que composants d'une version; cela fonctionne si vous l'avez disponible. –

Répondre

1

Avec le tri GNU:

sort -t "." -n -k1,1 -k2,2 file 

Sortie:

 
1.1 
1.2 
1.10 
3.2 
+0

Cela fonctionne correctement en raison de l'exigence que 10 trie après 2, ce qui n'est pas un tri numérique. Il pourrait être délicat dans des contextes plus généraux où les nombres ont des nombres de chiffres plus variés (12.1, 2.345) et, en particulier, sont intégrés dans des champs entre d'autres délimiteurs: 'a 12.1 b' etc. Je ne suis pas sûr qu'il y ait un fixer pour ce dernier, autre que '-V'. –