时间列中的空格导致脚本中的 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|
---------------------------------------------

这里我删除了|after2016-07-26因为2016-07-26 02:00:00isstart_time2016-07-26 06:00:31is 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

简单的小步骤加起来可以做很多工作!

相关内容