Linux: gato con separadores entre archivos

28

En Linux si escribe cat *, obtendrá algo como esto:

línea 1 de fichero1
línea 2 de fichero1
línea 1 de fichero2
línea 1 de archivo3
línea 2 de archivo3
línea 3 de archivo3

Lo que me gustaría es mostrar un separador entre los archivos. Algo como esto:
línea 1 de fichero1
línea 2 de fichero1
XXXXXXXXXXXX
línea 1 de fichero2
XXXXXXXXXXXX
línea 1 de archivo3
línea 2 de archivo3
línea 3 de archivo3

¿Es eso fácilmente posible con una línea fácil de escribir de memoria?

Daniele
fuente

Respuestas:

40

Si no eres demasiado quisquilloso con la apariencia del separador:

tail -n +1 *
Gilles 'SO- deja de ser malvado'
fuente
¡Esto es genial! Me sorprende cómo su comando es diferente de tail -n 1 *. Tampoco puedo encontrar ninguna mención del efecto de +1 (rathen que 1) en la página del manual.
Daniele
1
tail -n Xmuestra las últimas X líneas. tail -n +Xcomienza en la línea X que comienza en 1 , es decir, muestra todas las líneas excepto la primera (X-1).
Gilles 'SO- deja de ser malvado'
Ah, ahora puedo ver eso en la página del manual. Lo pasé por alto. Genial, muchas gracias
Daniele
Soluciones similares se encuentran en este artículo: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime
Perdón por el mal comentario, pero es increíble Gracias, @Gilles
Mike D
17

cd /to/your/directory; for each in *; do cat $each; echo "XXXXXXXXXXX"; done

Janne Pikkarainen
fuente
me ganó :-)
Sirex
¡Aún así, la solución provista por Gilles es impresionantemente corta!
Janne Pikkarainen
Guau. funciona de maravilla. Me ayudó a concatenar una carpeta de JSON
Mayank Chandak
11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

O

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

O

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

Usando solo Bash (no cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

Editar:

En AWK 4:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

Puede usar cualquier separador como los de los otros ejemplos en esta respuesta. Si desea el separador al final de cada archivo, cambie BEGINFILEa ENDFILE. Todavía puede aparecer al comienzo del script ya que es condicional (en lugar de implicar un orden de ejecución).

Pausado hasta nuevo aviso.
fuente
2
+1 para awk! Juro que puede hacer cualquier cosa ...
Brad