我正在创建自动邮件,其中邮件数据的正文应以表格格式显示。我确实在邮件正文中生成了一定程度的表格格式,但我得到了以下格式
---------------------------------------------
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|
---------------------------------------------
这里我删除了|
after2016-07-26
因为2016-07-26 02:00:00
isstart_time
和2016-07-26 06:00:31
is 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!,[^,]*$!!
这会删除从最后一个逗号到行尾的所有内容。本质上删除了“持续时间”字段
下一个
s!^!<tr><td>!
这确保每行以<tr><td>
- 基本上是新表行和新数据元素的开头
然后
s!$!</td></tr>!
这确保数据元素结束并且表行在每行的末尾结束。
此时我们有一条看起来像<tr><td>csv,file,data</td><tr>
这样的行,然后我们可以简单地将所有转换,
为</td><tr>
s!,!</td><td>!g
简单的小步骤加起来可以做很多工作!