Si tengo estos archivos en un directorio
cwcch10.pdf
cwcch11.pdf
cwcch12.pdf
cwcch13.pdf
cwcch14.pdf
cwcch15.pdf
cwcch16.pdf
cwcch17.pdf
cwcch18.pdf
cwcch1.pdf
cwcch2.pdf
cwcch3.pdf
cwcch4.pdf
cwcch5.pdf
cwcch6.pdf
cwcch7.pdf
cwcch8.pdf
cwcch9.pdf
¿Cómo puedo enumerarlos en Bash para que estén en orden numérico ascendente en función de la parte del número de la cadena. Entonces el orden resultante es cwcch1.pdf, cwcch2.pdf, ..., cwcch9.pdf, cwcch10.pdf
, etc.
Lo que finalmente intento hacer es concatenar los archivos PDF pdftk
con algo como lo siguiente
pdftk `ls *.pdf | sort -n` cat output output.pdf
pero eso no funciona ya que mi clasificación es incorrecta.
Respuestas:
Algo como esto podría hacer lo que quieras, aunque tiene un enfoque ligeramente diferente:
fuente
Es
sort
posible que tenga la capacidad de hacer esto por usted:fuente
-V, --version-sort natural sort of (version) numbers within text
Para este ejemplo en particular, también podría hacer esto:
Es decir, ordenar numéricamente (-n) en el segundo campo (-k2) usando 'h' como separador de campo (-th).
fuente
Puede usar la
-v
opción en GNUls
: tipo natural de números (versión) dentro del texto.Esto no funciona con BSD
ls
(por ejemplo, en OS X), donde la-v
opción tiene un significado diferente.fuente
Use la expansión de shell directamente en una línea de comandos. La expansión debería ordenarlos correctamente. Si entiendo
pdftk
la sintaxis de la línea de comandos correctamente, esto hará lo que desee:O puede intentar un enfoque diferente. Cuando necesito hacer algo como esto, generalmente trato de formatear mis números correctamente antes de tiempo. Si llego tarde y los archivos PDF ya están numerados como su ejemplo, lo usaré para volver a numerar:
Ahora la
ls
clasificación estándar funcionará correctamente.fuente
pdftk cwcch{{1..9},{10..18}}.pdf ...
bash
extensión?Aquí hay un método que solo usa sort:
fuente
Ordenar -g se usa para ordenar los números en orden ascendente.
El siguiente delineador itera sobre un archivo con los nombres de los archivos PDF y toma los números solo con egrep -o y usa sort -g para ordenar los números en orden ascendente . Luego alimenta estos números para sed y los conecta. Luego elimina la salida de duplicados con uniq.
En lugar de uniq, también puedes usar awk:
Lo anterior es equivalente a uniq.
Lo que estás buscando es este revestimiento:
Contenido de tmp:
EDITAR:
Salida de comando:
fuente
tmp
archivo? ¿Alguna salida para pegar en la respuesta?