Tengo varios archivos con los que quiero concat cat
. Digamos
File1.txt
foo
File2.txt
bar
File3.txt
qux
Quiero concat para que el archivo final se vea así:
foo
bar
qux
En lugar de esto con lo habitual cat File*.txt > finalfile.txt
foo
bar
qux
¿Cuál es la forma correcta de hacerlo?
Respuestas:
Tu puedes hacer:
Asegúrese de que el archivo
finalfile.txt
no existe antes de ejecutar el comando anterior.Si se le permite usar
awk
, puede hacer:fuente
AWK '{print $0}' *.txt
awk 'FNR==1 && NR > 1 ...'
embargo, puedes protegerte fácilmente contra esto .>finalfile.txt
despuésdone
, puede sobrescribir en lugar de agregar, lo que eliminará el requisito de asegurarse de que el archivo falta o está vacío antes del ciclo.Si tiene pocos archivos suficientes para enumerar cada uno, puede usar la sustitución de procesos en Bash, insertando una nueva línea entre cada par de archivos:
fuente
Si fuera yo quien lo haría, usaría sed:
En este patrón sed $ tiene dos significados, primero coincide con el último número de línea (como un rango de líneas para aplicar un patrón) y segundo coincide con el final de la línea en el patrón de sustitución.
Si su versión de sed no tiene
-s
(procesar archivos de entrada por separado), puede hacerlo todo como un bucle:fuente
sed -s '$G' *.txt > finalfile.txt
find
en lugar del*.txt
, lo que significa que el archivo se adjuntó a sí mismo.Puede hacerlo usando
xargs
si lo desea, pero la idea principal sigue siendo la misma:fuente
xargs
mucho más fácil de usar que los bucles en bash.Esto funciona en Bash:
A diferencia de las respuestas con
>>
(agregar), la salida de este comando se puede canalizar a otros programas.Ejemplos:
for f in File*.txt; do cat $f; echo; done > finalfile.txt
(for ... done) > finalfile.txt
(Parens son opcionales)for ... done | less
(entubado en menos)for ... done | head -n -1
(esto elimina la línea en blanco al final)fuente
Así es como lo hice en OsX 10.10.3
dado que el simple comando 'echo' sin parámetros terminó en ninguna nueva línea insertada.
fuente
En python, esto se concatena con líneas en blanco entre los archivos (
,
suprime la adición de una línea en blanco final adicional):Aquí está el feo python one-liner que se puede llamar desde el shell e imprime la salida en un archivo:
fuente