Linux: cat com separadores entre arquivos

19

No Linux, se você digitar cat *, você terá algo assim:

line1 do arquivo1 line2 de file1
line1 do arquivo2
line1 de file3
line2 de file3
line3 do arquivo3

O que eu gostaria é exibir um separador entre os arquivos. Algo como isto:
line1 de file1
line2 de file1
XXXXXXXXXXXX
line1 do arquivo2
XXXXXXXXXXXX
line1 de file3
line2 de file3
line3 do arquivo3

Isso é facilmente possível com um one-liner fácil de digitar de cor?

    
por Daniele 19.08.2010 / 12:56

3 respostas

31

Se você não é muito exigente com a aparência do separador:

tail -n +1 *
    
por 19.08.2010 / 13:12
14

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

    
por 19.08.2010 / 12:59
8
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Ou

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

Ou

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

Usando apenas Bash (sem cat ):

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

Editar:

No AWK 4:

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

Você pode usar qualquer separador, como os dos outros exemplos desta resposta. Se você quiser o separador no final de cada arquivo, altere BEGINFILE para ENDFILE . Ele ainda pode aparecer no início do script, pois é condicional (em vez de implicar em ordem de execução).

    
por 19.08.2010 / 16:08