operaciones - scripts bash ejemplos
Ordenando cadenas con nĂºmeros en Bash (3)
Creo que esta es una extensión de GNU para sort
, pero estás buscando la opción --version-sort
(o -V
):
$ printf "prefix%d/n" $(seq 10 -3 1)
prefix10
prefix7
prefix4
prefix1
$ printf "prefix%d/n" $(seq 10 -3 1) | sort
prefix1
prefix10
prefix4
prefix7
$ printf "prefix%d/n" $(seq 10 -3 1) | sort --version-sort
prefix1
prefix4
prefix7
prefix10
https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
Esta pregunta ya tiene una respuesta aquí:
A menudo he querido ordenar cadenas con números para que, al ordenar, por ejemplo abc_2, abc_1, abc_10
el resultado sea abc_1, abc_2, abc_10
. Cada mecanismo de ordenamiento que he visto ordena como abc_1, abc_10, abc_2
, es decir carácter por carácter desde la izquierda.
¿Hay alguna forma eficiente de ordenar para obtener el resultado que quiero? La idea de mirar a cada personaje, determinar si es un número, construir una subcadena de los números subsiguientes y clasificarlo como un número es demasiado espantoso para contemplar en bash
.
¿No ha implementado barbudo * nix guru una versión alternativa de sort
con una opción --sensible_numerical
?
Ejecute esto
sort -t _ -k 2 -g data.file
- -t separador
- -k clave / columna
- -g tipo numérico general
Prueba esto
$ cat a.txt
abc_1
abc_4
abc_2
abc_10
abc_5
$ sort -V a.txt
abc_1
abc_2
abc_4
abc_5
abc_10