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)
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
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)
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]
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
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.
Tags scripting