Como concatenar vários arquivos de texto com uma linha em branco entre cada um? [duplicado]

0

Estou escrevendo um script de shell e estou usando três arquivos html. Agora estou tentando concatenar todos os três arquivos e enviar o conteúdo como um email para mim mesmo.

Por favor, veja abaixo o que estou tentando fazer três arquivos: hello.html , hello1.html , hello2.html .

Agora eu estou adicionando a saída de todos esses três arquivos para o arquivo Final.Html arquivo abaixo e enviando-o, como um e-mail.

>Final.html
cat hello.html >> Final.html
cat hello1.html >> Final.html
cat hello2.html >> Final.html
cat Final.html | sendmail -t

Agora, minha entrada dos três arquivos é mostrada abaixo

$ cat hello.html
Hello world
$ cat hello1.html
india is my world
$ cat hello2.html
India is the best

Depois de enviar o e-mail, a saída que estou recebendo está abaixo

Hello world
india is my world
India is the best

A saída que estou procurando está abaixo com uma linha vazia entre cada arquivo. Para obter uma saída clara e limpa.

Hello world

india is my world

India is the best
    
por Nikhil 01.10.2018 / 19:02

4 respostas

1

Isso deve fornecer o resultado necessário

awk 'NR>1 && FNR==1{print ""};1' ./*.html > /path/to/Final.html

(verifique se o arquivo de saída não está na lista de arquivos de entrada)

    
por 02.10.2018 / 13:32
0

Você pode fazer isso tudo com um uso de cat , que, embora seja frequentemente usado para exibir o conteúdo de um arquivo a no terminal, é feito para o gato -enação de arquivos (ou seja, anexando-os juntos):

$ cat hello.html hello1.html hello2.html | mail -s "Subject Goes Here" [email protected]
    
por 01.10.2018 / 19:13
0

Isso vai fazer isso, eu adicionei o código para adicionar as linhas em branco. echo produzirá uma nova linha, ela também pode ser usada para gerar mais resultados.

>Final.html
cat hello.html >> Final.html
echo >> Final.html
cat hello1.html >> Final.html
echo >> Final.html
cat hello2.html >> Final.html

Este próximo usa um colchete para reduzir a quantidade de código.

{
     cat hello.html
     echo
     cat hello1.html
     echo
     cat hello2.html 
}> Final.html
    
por 01.10.2018 / 19:31
0

Usando o GNU awk (que suporta o padrão especial ENDFILE ):

awk '1; ENDFILE { print "" }' hello.html hello1.html hello2.html >Final.html

O script awk transmite os dados não modificados de dados de cada arquivo por vez (o 1; pode ser substituído por { print } , que faz a mesma coisa). No final de cada arquivo, o bloco ENDFILE gerará uma linha vazia.

Para inserir adicionalmente o nome do arquivo antes dos dados de cada arquivo (isso não fazia parte da pergunta):

awk 'BEGINFILE { print FILENAME } 1
     ENDFILE   { print "" }' hello.html hello1.html hello2.html >Final.html

O padrão especial BEGINFILE funciona como ENDFILE , mas será acionado antes de ler a primeira linha de um novo arquivo. A variável FILENAME é uma variável padrão awk e contém o nome do caminho do arquivo de entrada atual.

    
por 02.10.2018 / 13:42

Tags