メールデータの本文が表形式で表示される自動メールを作成しています。電子メール本文にある程度の表形式を生成しますが、次の形式を取得します。
---------------------------------------------
j-id|start-time|End-time|
abc|2016-07-26|02:00:00|2016-07-26|06:00:31|
---------------------------------------------
しかし、次のようにする必要があります。
---------------------------------------------
j-id|start-time|End-time|
abc|2016-07-26 02:00:00|2016-07-26 06:00:31|
---------------------------------------------
ここではisとisのために|
後で削除しました。2016-07-26
2016-07-26 02:00:00
start_time
2016-07-26 06:00:31
endtime
mysql DBはデータをクエリしているため、開始時刻/終了時刻の形式を変更することはできず、出力をExcelファイルにリダイレクトしてからhtml形式に変換してメールで送信できます。予想されるフォーマット出力を得るのに役立ちますか?
私のコードは次のとおりです。
awk 'BEGIN{
FS=","
}
{
printf "<TR>"
for(i=1;i<=NF;i++)
printf "<TD>%s</TD>", $i
print "</TR>"
}
END{
print "</TABLE></BODY></HTML>"
}
' status.csv > status.html
(
echo "From:abc "
echo "Subject: testing of html table using"
echo "Content-type: text/html"
echo
awk 'BEGIN{print "<table border="1">"} {print "<tr>";for(i=1;i<=NF;i++)print "<td>" $i"</td>";print "</tr>"} END{print "</table>"}' status.html
) | sendmail [email protected] text
状態.csv
st,2016-07-28 02:00:00,2016-07-28 08:10:18,06:10:18
evergreen,2016-07-28 08:10:32,2016-07-28 09:13:00,01:02:28
Discount,2016-07-28 09:00:00,2016-07-28 19:11:07,10:11:07
GO,2016-07-28 09:00:00,2016-07-28 15:33:04,06:33:04
BF,2016-07-28 09:30:38,2016-07-28 23:43:32,14:12:54
答え1
実際に持っているCSVファイルに追加のヘッダー行があるとします。そうでない場合は、簡単に行を追加してecho
タイトルを追加できます。
CSVに追加のデータ列があることが確認されました。期間のように見えます。
期間を維持するには、次のように簡単です。
(
echo "From: abc"
echo "Subject: testing of html table using"
echo "Content-type: text/html"
echo
echo '<table border="1">'
sed -e 's!^!<tr><td>!' -e 's!$!</td></tr>!' -e 's!,!</td><td>!g' status.csv
echo '<table>'
) | sendmail ...
CSVの各行は、次のようなものに変換されます。
<tr><td>BF</td><td>2016-07-28 09:30:38</td><td>2016-07-28 23:43:32</td><td>14:12:54</td></tr>
出力の最後の列が必要ない場合は、行を変更してsed
削除できます。
sed -e 's!,[^,]*$!!' -e 's!^!<tr><td>!' -e 's!$!</td></tr>!' -e 's!,!</td><td>!g' status.csv
今同じ行
<tr><td>BF</td><td>2016-07-28 09:30:38</td><td>2016-07-28 23:43:32</td></tr>
,
どちらの場合も、時間と日付の間に何もないので、同じ<td>
...</td>
データ要素に保存します。
以下を追加するように編集されました。
sed をコンポーネント部分に分割しましょう。
最初
s!,[^,]*$!!
これにより、最後のコンマから行末までのすべての内容が削除されます。本質的に「期間」フィールドの削除
Next
s!^!<tr><td>!
これにより、各行は<tr><td>
デフォルトで新しいテーブル行と新しいデータ要素で始まります。
それから
s!$!</td></tr>!
これにより、データ要素が終了し、テーブル行が各行の終わりで終わります。
この時点で次のような行ができ<tr><td>csv,file,data</td><tr>
、すべてを簡単に次の,
ように変換できます。</td><tr>
s!,!</td><td>!g
簡単な小さなステップで多くのタスクが追加されます!