2009-10-07 5 views
1

Le titre le résume.Linux: le tri GNU ne trie pas seq

$ echo `seq 0 10` `seq 5 15` | sort -n 
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15 

Pourquoi cela ne fonctionne-t-il pas?

Même si je ne l'utilise seq:

echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' | sort -n 
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15 

Et même le creusement de fossés echo directement:

$ echo '0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15' > numbers 
$ sort -n numbers 
0 1 2 3 4 5 6 7 8 9 10 5 6 7 8 9 10 11 12 13 14 15 

Répondre

10

sort(1) sortes lignes. Vous devez analyser vous-même les données délimitées par des espaces:

echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n 
+0

Notez que je ne peux pas tester cela avec 'seq (1)' (non installé sur OS X), mais cela fonctionne bien pour 'echo (1)'. –

+0

Duh ... Merci. * 15 caractères * – LiraNuna

+0

De rien. –

5

Vous avez une seule ligne d'entrée. Il n'y a rien à trier.

+3

Eh bien, techniquement, il ya * quelque chose à trier, mais c'est simple et incroyablement rapide :-) – paxdiablo

9

Parce que vous avez besoin pour les nouvelles lignes sort:

$ echo `seq 0 10` `seq 5 15` | tr " " "\\n" | sort -n | tr "\\n" " "; echo "" 
0 1 2 3 4 5 5 6 6 7 7 8 8 9 9 10 10 11 12 13 14 15 
$ 
3

La commande que vous avez saisi entraîne la séquence de nombres étant tous passé à sort en une ligne. Ce n'est pas ce que tu veux. Il suffit de passer la sortie de seq directement à sort:

 
(seq 0 10; seq 5 15) | sort -n 

Par ailleurs, comme vous venez de découvrir, la construction

 
echo `command` 

ne le fait pas habituellement faire ce que vous attendez et est redondant pour ce que vous attendez réellement: Il demande à l'interpréteur de commandes de capturer la sortie de command et de la passer à echo, ce qui la produit à nouveau en sortie. Laissez simplement la sortie de la commande passer directement (à moins que vous vraiment signifie l'avoir traité par echo, peut-être pour développer des séquences d'échappement, ou pour tout réduire à une ligne).

+0

'ne fait pas ce que vous attendez' - En fait, il * fait * exactement ce que je m'attendais à faire. Je ne me souviens pas de trier les lignes: D – LiraNuna

+0

Je faisais référence à l'utilisation générale de la construction. Vous ne pensez généralement pas à réduire tout le texte en une ligne, par exemple, ou la sortie de la commande pour interpréter des caractères spéciaux (pensez à des problèmes de sécurité, par exemple). Edité pour ajouter "habituellement", cependant. – Idelic

Questions connexes