메시지 본문에 표 형식(공백이 포함된 열 데이터)의 텍스트 파일을 보냅니다.

메시지 본문에 표 형식(공백이 포함된 열 데이터)의 텍스트 파일을 보냅니다.

누구든지 쉘 스크립트를 사용하여 메일 본문에 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

관련 정보