it-swarm-es.tech

¿Cómo fusionar todos los archivos (de texto) en un directorio en uno?

Tengo 14 archivos que forman parte de un solo texto. Me gustaría fusionarlos en uno. ¿Como hacer eso?

99
Ivan

Esto es técnicamente lo que se supone que debe hacer cat ("concatenar"), a pesar de que la mayoría de la gente lo usa para generar archivos en stdout. Si le da varios nombres de archivo, los generará todos secuencialmente y luego podrá redirigirlos a un nuevo archivo; en el caso de todos los archivos simplemente use * (o /path/to/directory/* si aún no está en el directorio) y su Shell lo expandirá a todos los nombres de archivo

$ cat * > merged-file
182
Michael Mrozek

Si sus archivos no están en el mismo directorio, puede usar el comando find antes de la concatenación:

find /path/to/directory/ -name *.csv -print0 | xargs -0 -I file cat file > merged.file

Muy útil cuando sus archivos ya están ordenados y desea fusionarlos para analizarlos.


Más portátil:

find /path/to/directory/ -name *.csv -exec cat {} + > merged.file

Esto puede o no preservar el orden de los archivos.

27
3nrique0

El comando

$ cat * > merged-file

en realidad tiene el efecto secundario no deseado de incluir 'archivo combinado' en la concatenación, creando un archivo fuera de control. Para evitar esto, escriba el archivo combinado en un directorio diferente;

$ cat * > ../merged-file

o use una coincidencia de patrón que ignorará el archivo combinado;

$ cat *.txt > merged-file
10
Christopher Jones

Como dicen los otros de aquí ... Puede usar cat

Digamos que tienes:

~/file01
~/file02
~/file03
~/file04
~/fileA
~/fileB
~/fileC
~/fileD

Y solo quieres file01 a file03 y fileA a fileC:

cat ~/file01 ~/file02 ~/file03 ~/fileA ~/fileB ~/fileC > merged-file

O, usando la expansión de llaves:

cat ~/file0{1..3} ~/file{A..C} > merged-file

O, usando una expansión de llave más elegante:

cat ~/file{0{1..3},{A..C}} > merged-file

O puede usar el bucle for:

for i in file0{1..3} file{A..C}; do cat ~/"$i"; done > merged-file
10
Florin Idita

Puede especificar el pattern de un archivo y luego combinarlos de la siguiente manera:

cat *pattern* >> mergedfile
0
user182845

Otra opción es sed:

sed r 1.txt 2.txt 3.txt > merge.txt 

O...

sed h 1.txt 2.txt 3.txt > merge.txt 

O...

sed -n p 1.txt 2.txt 3.txt > merge.txt # -n is mandatory here

O sin redireccionamiento ...

 sed wmerge.txt 1.txt 2.txt 3.txt

Tenga en cuenta que la última línea de escritura también merge.txt (no wmerge.txt!). Puede usar w "merge.txt" para evitar confusiones con el nombre del archivo y -n para la salida silenciosa.

Por supuesto, también puede acortar la lista de archivos con comodines. Por ejemplo, en el caso de archivos numerados como en los ejemplos anteriores, puede especificar el rango con llaves de esta manera:

sed -n w"merge.txt" {1..3}.txt
0
Harini