5 votos

Combinar múltiples txts en una

Estoy tratando de combinar múltiples txts en un archivo grande. Quiero poner en secuencia pero esto parece no funcionar correctamente.

En este tiempo he probado desde el terminal: cat *.txt >merged.txt pero parece concatenar los archivos al azar.

En mi carpeta tengo todos los archivos nombrados con números secuenciales (desde 1 txt a 10000.txt). ¿Me estoy perdiendo algo?

10voto

siva Puntos 23

Esta expansión no es al azar, es garantizado para ser alfabético .k.una. lexicográficos orden de acuerdo a su configuración regional), que es diferente de numérico orden de clasificación.

Usted puede usar la llave de expansión para este. Reemplazar '10' con el número de la última archivo.

cat {1..10}.txt > merged.txt

Este usa bash llave de expansión, que se puede leer en LESS='+/Brace Expansion' man bash.

Tenga en cuenta que a diferencia de archivo globs, la llave de expansión que va a generar cadenas arbitrarias, que no necesita ser archivos existentes; en este caso, esto significa que usted recibirá los errores, si los hay archivos que faltan a partir de la secuencia (por ejemplo, si 7.txt no existe). Sin embargo, esto no afecta el contenido de merged.txt que será producido como se esperaba.

3voto

Wildcard Puntos 121

Uso zsh con globos extendidos- y Habilitar la ordenación numérica de las expansiones de la globalización con la (n) calificador de globalización:

zsh -c 'cat *.txt(n) > merged.txt'

Puede obtener más específica con tus globos, también:

zsh -c 'cat <1-10000>.txt(n) > merged.txt'

Ver man zshexpn para más detalles.

1voto

The HCD Puntos 123

Cabezas para arriba. Si los archivos son de hecho numerados 1-10000 entonces el sistema operativo es ordenar tus archivos en el orden del primer número: 1 txt 11 txt txt de 12... 19. txt txt de 100... 2 txt 20 txt 21 txt

etcetera.

Tienes que renombrar archivos como 00001, 00002 y así sucesivamente.

1voto

Mark Puntos 6

Normalmente, usted no analizar la salida de ls, pero como los nombres de archivo no contener ningún espacio en blanco o "inusual" de los personajes, podemos hacer esto:

shopt -s extglob
ls +([0-9]).txt | sort -n | xargs cat > merged.txt

El +([0-9]) es una fiesta extendida glob patrón para que coincida con sólo uno o más números.

Con GNU ls (disponible a través de homebrew en el paquete coreutils)

ls -v +([0-9]).txt | xargs cat > merged.txt

1voto

musicman523 Puntos 241

Otra respuesta posible podría ser:

ls | sort -n | xargs cat > merged.txt


En un sistema GNU/Linux se puede hacer ls -v | xargs cat > merged.txt , pero esto es específico de la versión GNU de ls y no trabajo para BSD ls .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by: