Linux: gato com separadores entre arquivos


28

No Linux, se você digitar cat *, obterá algo como isto:

linha1 do arquivo1
linha2 do arquivo1
linha1 do arquivo2
linha1 do arquivo3
linha2 do arquivo3
linha3 do arquivo3

O que eu gostaria é exibir um separador entre arquivos. Algo assim:
linha1 do arquivo1
linha2 do arquivo1
XXXXXXXXXXXX
linha1 do arquivo2
XXXXXXXXXXXX
linha1 do arquivo3
linha2 do arquivo3
linha3 do arquivo3

Isso é facilmente possível com uma linha fácil de digitar de cor?

Respostas:


40

Se você não é muito exigente quanto à aparência do separador:

tail -n +1 *

Isso é ótimo! Estou surpreso como seu comando é diferente da cauda -n 1 *. Também não consigo encontrar nenhuma menção ao efeito de +1 (maior que 1) na página de manual.
Daniele

11
tail -n Xmostra as últimas X linhas. tail -n +Xcomeça na linha X e começa em 1 , ou seja, mostra todas, exceto as primeiras (X-1) linhas.
Gilles 'SO- stop be evil'

Ah, agora eu posso ver isso na página de manual. Eu ignorei isso. Grandes, graças um bando
Daniele

Soluções semelhantes estão neste artigo: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime 4/14

Desculpe pelo comentário ruim, mas isso é incrível. Obrigado, @Gilles
Mike D

17

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


me derrote :-)
Sirex

Ainda assim, a solução fornecida por Gilles é impressionantemente curta!
Janne Pikkarainen

Uau. funciona maravilha. Ajudou-me a concatenar uma pasta de JSONs
Chandak

11
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 (não 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 nesta resposta. Se você deseja o separador no final de cada arquivo, mude BEGINFILEpara ENDFILE. Ele ainda pode aparecer no início do script, pois é uma ordem condicional (em vez de implicar em execução).


2
+1 para awk! Eu juro que pode fazer qualquer coisa ...
brad
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.