una sufijos sufijo significado prefijos prefijo poner para palabra niños muchas ejemplos como clase celdas agregar linux bash unix sorting

linux - poner - prefijos y sufijos significado



¿Cómo ordenar las cadenas que contienen un prefijo común y un sufijo numérico de Bash? (4)

Aquí hay una lista de archivos:

some.string_100_with_numbers.in-it.txt some.string_101_with_numbers.in-it.txt some.string_102_with_numbers.in-it.txt some.string_23_with_numbers.in-it.txt some.string_24_with_numbers.in-it.txt some.string_25_with_numbers.in-it.txt

Ahora me gustaría clasificarlo numéricamente. Comenzando con * 23 * y terminando con * 102 *.

He intentado -n y -g . -t ayuda en estas cadenas desordenadas.

¿Puedo ignorar las cadenas anteriores al número con una opción o tengo que ser inteligente y hacer un script?


En el caso general, intente la transformada de Schwartz .

Brevemente, divida el número en su propio campo, ordénelo y descarte el campo agregado.

# In many shells, use ctrl-v tab to insert a literal tab after the first /2 sed ''s/^/([^0-9]*/)/([0-9][0-9]*/)//2 /1/2/'' file | sort -n | cut -f2-

Esto funciona bien si la entrada no tiene un separador obvio, como en la siguiente entrada.

abc1 abc10 abc2

donde le gustaría que la clasificación desplace la última línea justo después de la primera.


Intenta lo siguiente:

sort -t ''_'' -k 2n

  • -t ''_'' (establece el delimitador al carácter de subrayado)
  • -k 2n (ordena por la segunda columna usando orden numérico)

DEMO .


Si está disponible, simplemente use sort -V . Esta es una clasificación para los números de versión, pero funciona bien como una opción de "clasificación natural".

$ ff=$( echo some.string_{100,101,102,23,24,25}_with_numbers.in-it.txt )

Sin ordenación

$ for f in $ff ; do echo $f ; done some.string_100_with_numbers.in-it.txt some.string_101_with_numbers.in-it.txt some.string_102_with_numbers.in-it.txt some.string_23_with_numbers.in-it.txt some.string_24_with_numbers.in-it.txt some.string_25_with_numbers.in-it.txt

Con el tipo -V:

$ for f in $ff ; do echo $f ; done | sort -V some.string_23_with_numbers.in-it.txt some.string_24_with_numbers.in-it.txt some.string_25_with_numbers.in-it.txt some.string_100_with_numbers.in-it.txt some.string_101_with_numbers.in-it.txt some.string_102_with_numbers.in-it.txt


Usa ls -lv

De la página del manual:

-v natural sort of (version) numbers within text