任何人都可以帮助我使用 shell 脚本在邮件正文中以 html 表格格式发送以下数据。样本文件
abcd "this is to test" 123
csdf "another test" 10000
我创建了下面的脚本,但当第二列值中有空格时它会中断
echo "send an email"
awk 'BEGIN {
print "<html><body><table border=1 cellspacing=0 cellpadding=3>"
print "<tr>"
print "<td>date</td>";
print "<td>name</td>";
print "<td>total</td>";
print "</tr>"
} {
print "<tr>"
print "<td>"$1"</td>";
print "<td>"$2"</td>";
print "<td>"$3"</td>";
print "</tr>"
} END {
print "</table></body></html>"
} ' sample.txt >> sample.html
(
echo "To: [email protected]"
echo "MIME-Version: 1.0"
echo "Subject:$v_subject"
echo "Content-Type: text/html"
cat sample.html
) | sendmail -t
答案1
而是awk
考虑使用适当的工具:
csv
使用适当的 CSV 解析器读取html
使用模板引擎将模板与代码分开。
我会选择python
同时提供两者的选项,但这是一个选择问题。
这是一个工作示例:
-->script.py
#!/usr/bin/env python
import csv
from jinja2 import Template
import sys
templ = '''<html>
<body>
<table border=1 cellspacing=0 cellpadding=3>
<tr>
<td>date</td>
<td>name</td>
<td>total</td>
</tr>
{% for row in rows %}<tr>
{% for col in row %}<td>{{col}}</td>{% endfor %}
</tr>{% endfor %}
</table>
</body></html>
'''
with open(sys.argv[1]) as csvfile:
rows = list(csv.reader(csvfile, delimiter=' '))
tm = Template(templ)
print(tm.render(rows=rows))
- 跑步
python script.py sample.csv > sample.html
- 为了方便起见,我将模板作为字符串包含在代码中,您应该考虑使用单独的模板文件
- 您当然也可以直接通过以下方式发送电子邮件
python
:-)
您可能需要安装jinja2
:
pip install jinja2