Linux: GNU no lo hace sort SEC
Pregunta
título lo resume todo.
$ 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
¿Por qué no funciona?
Incluso si yo no uso 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
E incluso abandonando echo
directamente:
$ 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
Solución
tipo sort(1)
líneas . Usted tiene que analizar los datos delimitados los espacios en blanco a sí mismo:
echo `seq 0 10` `seq 5 15` | tr " " "\n" | sort -n
Otros consejos
Debido a que necesita nuevas líneas para 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
$
Usted tiene una sola línea de entrada. No hay nada que resolver.
El comando como las ha escrito resulta en la secuencia de números siendo todos pasaron a sort
en una línea. Eso no es lo que desea. Sólo tiene que pasar la salida de seq
directamente a sort
:
(seq 0 10; seq 5 15) | sort -n
Por cierto, como se acaba de descubrir, la construcción
echo `command`
no general hace lo que espera y es redundante para lo que esperas: Cuenta la cáscara para capturar la salida de command
y pasarlo a echo
, que la produce como salida de nuevo. Simplemente deja que la salida del comando de ir a través de forma directa (a menos que realmente significa que esta sea tratada por echo
, tal vez para ampliar las secuencias de escape, o para colapsar todo a una sola línea).