如何连接多个文本文件,每个文件之间有一个空行?

如何连接多个文本文件,每个文件之间有一个空行?

我正在编写一个 shell 脚本,其中使用了三个 html 文件。现在我正在尝试连接所有三个文件,并将内容作为电子邮件发送给我自己。

请参阅下面我正在尝试执行的三个文件:hello.htmlhello1.htmlhello2.html

现在,我将所有这三个文件的输出附加到Final.Html如下文件中,并将其作为电子邮件发送。

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

现在我输入的所有三个文件如下所示

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

发送邮件后,我得到的输出如下

Hello world
india is my world
India is the best

我正在寻找的输出如下,每个文件之间有一个空行。获得干净清晰的输出。

Hello world

india is my world

India is the best

答案1

这应该给出所需的输出,

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

(确保输出文件不在输入文件列表中)

答案2

您只需使用一次即可完成所有cat操作,而它通常用于显示A终端上的文件,实际上是为了con--生成文件(即将它们附加在一起):

$ cat hello.html hello1.html hello2.html | mail -s "Subject Goes Here" [email protected]

答案3

这样就可以了,我添加了代码来添加空行。 echo会输出一个换行符,它也可以用来输出更多。

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

下一个使用括号,以减少代码量。

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

答案4

使用GNU awk(支持ENDFILE特殊模式):

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

awk脚本依次传递每个文件的未修改数据(1;可以替换为{ print },其作用相同)。在每个文件的末尾,该ENDFILE块将输出一个空行。

要在每个文件的数据之前另外插入文件名(这不是问题的一部分):

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

特殊模式的BEGINFILE工作方式与此类似,ENDFILE但会在读取新文件的第一行之前触发。该FILENAME变量是标准awk变量,包含当前输入文件的路径名。

相关内容