各ファイル間に空白行を使用して複数のテキストファイルをリンクする方法は? [コピー]

各ファイル間に空白行を使用して複数のテキストファイルをリンクする方法は? [コピー]

私は3つのhtmlファイルが使用されるシェルスクリプトを書いています。 3つのファイルをすべてリンクして、内容を電子メールで送信しようとしています。

以下で実行したい3つのファイルを参照してください。hello.html、、、hello1.htmlhello2.html

これで、これら3つのファイルのすべての出力がFinal.Html以下のファイルに追加され、電子メールで送信されます。

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

今私が入力した3つのファイルはすべて次のようになります。

$ 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表示に使用します。実際に端末にファイルを保存します。- ファイルの作成(つまり、一緒に追加):

$ 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を使用するawkENDFILE特殊モードをサポート):

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変数であり、現在の入力ファイルのパス名を含みます。

関連情報