Hay un comando estándar para dividir archivos: dividir.
Por ejemplo, si quiero dividir un archivo de palabras en varios fragmentos de 10000 líneas, puedo usar:
split -dl 10000 words wrd
y generaría varios archivos de la forma wrd.01, wrd.02, etc.
Pero quiero tener una extensión específica para esos archivos; por ejemplo, quiero obtener archivos wtd.01.txt, wrd.02.txt.
¿Hay una manera de hacerlo?
Esto no estaba disponible en ese momento, pero con versiones más recientes (
≥ 8.16
) degnu split
uno puede usar el--additional-suffix
interruptor para tener control sobre la extensión resultante. Deman split
:así que al usar esa opción:
las piezas resultantes terminarán automáticamente en
.txt
:fuente
gnu split
parte degnu coreutils
. También está disponible en OSX si realiza la instalación acoreutils
través de,homebrew
pero tenga en cuenta que, de manera predeterminada, en OSX, lasgnu
utilidades tieneng
antepuesto a su nombre (por ejemplo, engstat
lugar destat
), por lo que puede invocarlogsplit
(o modificar la RUTA según la guía aquí si lo desea) para usarlosplit
sobre el OSXsplit
). HTHgsplit
para que los sufijos numéricos (-d) funcionen.Dichas tareas se gestionan mejor con el shell. Use dividir y luego escriba un bucle simple para cambiar el nombre de los archivos. P.ej
cambiaría el nombre de sus archivos wrd.01, wrd.02, etc. para que todos tengan una extensión .txt.
fuente
split+mv
combo es más de 6 veces más rápido queawk
(aproximadamente 3s frente a 18s ) para un archivo de entrada de 10 millones de líneas (75 MB) ... el texto en cada línea era su propio número de línea ... Gracias por repetirlo el "obvio" :)split + mv
es 75 veces más rápido queawk
: cuando hay 100 veces más archivos,split + mv
es 1,5 veces más rápido queawk
. Entonces, para mí, estesplit + mv
método gana, sin duda. Es como consice (posiblemente más), y es más rápido queawk
.for file in wrd.*; do mv "$file" "$file.txt"; done
:)