awkを使用してtxtファイルから複数行を抽出し、htmlの単一のセルに配置します。

awkを使用してtxtファイルから複数行を抽出し、htmlの単一のセルに配置します。

このスクリプトを使用して、テキストファイルからコマンドラインを抽出し、表形式で電子メールで送信します。単一のコマンドに複数行の出力があるため、awkを使用して単一のセルに複数行を配置する方法を知る必要があります。

使用されたスクリプト:

tmpfile="/tmp/test.html"
 input="/tmp/test.txt"
 {
 echo '<table border=1 cellspacing=0 cellpadding=3>'
 awk 'NR==1 {print "<tr><td>Hostname</td><td>"$0"</td></tr>"}' "$input"
 awk 'NR==2,NR==5 {print "<tr><td>IPAddress</td><td>"$0"</td></tr>"}' "$input"
 awk 'NR==6{print "<tr><td>Date</td><td>"$0"</td></tr>"}' "$input" 
 echo '</table>'
 } >"$tmpfile"

テキストファイル:cat /tmp/test.txt - 行2〜5には単一コマンドの出力が含まれています。

machinename.domain
ens00: flags=00  
inet 00.00.00.00 netmask 00.00.00.0 broadcast
ether 00:00:00:00:00:00 txqueuelen 000 (Ethernet) 
RX packets 97 bytes 61809
currentdate

メール表形式で除外

Hostname    machinename.domain
IPAddress   ens00: flags=00  
            inet 00.00.00.00 netmask 00.00.00.0 broadcast
            ether 00:00:00:00:00:00 txqueuelen 000 (Ethernet) 
            RX packets 97 bytes 61809
Date        currentdate

表形式の現在の出力

Hostname    machinename.domain
IPAddress   ens00: flags=00  
IPAddress   inet 00.00.00.00 netmask 00.00.00.0 broadcast
IPAddress   ether 00:00:00:00:00:00 txqueuelen 000 (Ethernet) 
IPAddress   RX packets 97 bytes 61809
Date        currentdate

ベストアンサー1

これはおそらくawkでやりたいことです:

$ cat tst.sh
#!/usr/bin/env bash

tmpfile='test.html'
input='test.txt'

awk '
    BEGIN {
        print "<table border=1 cellspacing=0 cellpadding=3>"
    }
    NR == 1 {
        print "<tr><td>Hostname</td><td>" $0 "</td></tr>"
    }
    NR == 2 {
        print "<tr><td valign=\"top\">IPAddress</td><td>" $0
    }
    (2 < NR) && (NR < 6) {
        print "<br>" $0
    }
    NR == 6 {
        print "</td></tr>"
        print "<tr><td>Date</td><td>" $0 "</td></tr>"
    }
    END {
        print "</table>"
    }
' "$input" > "$tmpfile"

$ ./tst.sh

$ cat test.html
<table border=1 cellspacing=0 cellpadding=3>
<tr><td>Hostname</td><td>machinename.domain</td></tr>
<tr><td valign="top">IPAddress</td><td>ens00: flags=00
<br>inet 00.00.00.00 netmask 00.00.00.0 broadcast
<br>ether 00:00:00:00:00:00 txqueuelen 000 (Ethernet)
<br>RX packets 97 bytes 61809
</td></tr>
<tr><td>Date</td><td>currentdate</td></tr>
</table>

ブラウザでレンダリングすると、テーブルは次のようになります。私の考えでは、これがあなたが望むものです。

ここに画像の説明を入力してください。

おすすめ記事