Linux: GNU ne trie pas trier seq
Question
Titre résume.
$ 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 pas ce travail?
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
La solution
trie sort(1)
lignes . Vous devez analyser les données des espaces délimités vous:
echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
Autres conseils
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
$
Vous avez une seule ligne d'entrée. Il n'y a rien à trier.
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 vous voulez. 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 pas habituellement faire ce que vous attendez et est redondant pour ce que vous attendez réellement: Il indique au shell pour capturer la sortie de command
et le transmettre à echo
, qu'elle produit en sortie à nouveau. Il suffit de laisser la sortie de la commande passer par directement (à moins que vous vraiment signifie qu'elle soit traitée par echo
, peut-être de développer des séquences d'échappement, ou de s'effondrer tout à une ligne).