¿Existe una utilidad Linux o un comando Bash que pueda usar para ordenar una cadena de números delimitada por espacios?Ordenando números delimitados por espacios con Linux/Bash
Respuesta
Aquí está un ejemplo sencillo para que te va:
echo "81 4 6 12 3 0" | tr " " "\n" | sort -g
tr
traduce los espacios que delimitan los números, en los retornos de carro, porque especie utiliza retornos de carro como delimitadores (es decir, es para la clasificación líneas de texto). La opción -g
le dice a ordenar que ordena por "valor numérico general".
man sort
para obtener más detalles acerca de sort
.
$ s=(one two three four)
$ sorted=$(printf "%s\n" ${s[@]}|sort)
$ echo $sorted
four one three two
Esta es una variación de respuesta de ghostdog74 que es demasiado grande para caber en un comentario. Muestra dígitos en lugar de nombres de números y tanto la cadena original como el resultado están en cadenas delimitadas por espacios (en lugar de una matriz que se convierte en una cadena delimitada por una nueva línea).
$ s="3 2 11 15 8"
$ sorted=$(echo $(printf "%s\n" $s | sort -n))
$ echo $sorted
2 3 8 11 15
$ echo "$sorted"
2 3 8 11 15
Si no ha utilizado el echo
cuando se ajusta el valor de sorted
, la cadena tiene saltos de línea en el mismo. En ese caso, haciéndolo eco sin comillas lo pone todo en una línea, pero, como lo haría eco con comillas, cada número aparecería en su propia línea. Este es el caso si el original es una matriz o una cadena.
# demo
$ s="3 2 11 15 8"
$ sorted=$(printf "%s\n" $s | sort -n)
$ echo $sorted
2 3 8 11 15
$ echo "$sorted"
2
3
8
11
15
Usando la expansión de parámetros Bash (para reemplazar espacios con saltos de línea) que podemos hacer:
str="3 2 11 15 8"
sort -n <<< "${str// /$'\n'}"
# alternative
NL=$'\n'
str="3 2 11 15 8"
sort -n <<< "${str// /${NL}}"
Si usted tiene realmente una cadena delimitada por espacios de los números, a continuación, una de las otras respuestas proporcionadas funcionaría multa. Si la lista es una matriz de fiesta, entonces:
oldIFS="$IFS"
IFS=$'\n'
array=($(sort -g <<< "${array[*]}"))
IFS="$oldIFS"
podría ser una solución mejor. El delimitador de línea nueva sería útil si desea generalizar para ordenar una matriz de cadenas en lugar de números.
mi lista es una matriz bash, pero esto no funciona para mí: 'packages =" $ (sort <<< $ {! Package2apk [@]}) "' – Jayen
$ awk 'BEGIN{split(ARGV[1], numbers);for(i in numbers) {print numbers[i]} }' \
"6 7 4 1 2 3" | sort -n
Si bien este fragmento de código puede ser la solución, [incluido una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely- code-based-answers) realmente ayuda a mejorar la calidad de su publicación.Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. – yivi
La mejora en buen golpe de Evan Krall "array tipo" al limitar el alcance de IFS a un solo comando:
printf "%q\n" "${IFS}"
array=(3 2 11 15 8)
array=($(IFS=$'\n' sort -n <<< "${array[*]}"))
echo "${array[@]}"
printf "%q\n" "${IFS}"
Esta es una variación de la respuesta @JamesMorris:
echo "81 4 6 12 3 0" | xargs -n1 | sort -g | xargs
En lugar de tr
, uso xargs -n1
para convertir a líneas nuevas. El xargs
final es convertir de nuevo a una secuencia de números separados por espacios.
- 1. C# - ¿Cómo analizar el archivo de texto (espacios delimitados por números)?
- 2. palabras separadas delimitados por espacios en una cadena
- 3. Ordenando números y cadenas mixtas
- 4. Regex: enteros delimitados por comas
- 5. Insertar números delimitados específicos en una columna en SQL Server
- 6. Ordenando una lista de números con costo modificado
- 7. PHP - ordenando una matriz de nombres de archivos con números?
- 8. Ordenando números en formato de cadena con Python
- 9. Python palabras delimitados por espacios separados de expresiones regulares en una lista
- 10. cómo saber si los campos del archivo csv están delimitados por tabulaciones o delimitados por comas
- 11. Excel y archivos delimitados por tabulaciones Pregunta
- 12. SQL ordenando por texto ASC, muestra números en la última posición
- 13. Ordenando por lambda arbitraria
- 14. Ordenando archivos por fecha
- 15. Lucene.NET - ordenando por int
- 16. Ordenando dinámicamente con LINQ
- 17. Ordenando archivos con DirectoryIterator
- 18. Números y espacios - Regex de teléfono suelto
- 19. Ordenando columna de cadena que contiene números en SQL?
- 20. Ordenando un ListView por columna
- 21. Ordenando por el placer - Quicksort
- 22. Ordenando matriz mutable por clave de diccionario
- 23. C++ ordenando los números del más pequeño al más grande
- 24. Django: ordenando el valor numérico con order_by
- 25. Ordenando una lista con pedidoBy
- 26. Ordenando por fecha con underscore.js o simplemente JS
- 27. Entidades en contextos delimitados en Diseño controlado por dominio
- 28. XML vs archivos de texto delimitados por comas
- 29. Rieles: ordenando una consulta por params?
- 30. Ordenando una lista de canciones por Popularidad
Agregué otro '| tr' con los parámetros invertidos para recuperar una cadena delimitada por espacios. – isuldor
Para invertir el orden, use '-r'. – Tim