時間列の空白が原因で、スクリプトのhtmlファイル形式に問題が発生します。

時間列の空白が原因で、スクリプトのhtmlファイル形式に問題が発生します。

メールデータの本文が表形式で表示される自動メールを作成しています。電子メール本文にある程度の表形式を生成しますが、次の形式を取得します。

---------------------------------------------
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-262016-07-26 02:00:00start_time2016-07-26 06:00:31endtime

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

簡単な小さなステップで多くのタスクが追加されます!

関連情報