从配置单元读取数据并以HTML格式显示

时间:2018-09-05 18:28:39

标签: html shell hive

我试图通过shell脚本从hive表中读取数据,并通过使用html的电子邮件将hive查询的返回结果发送出去。但是,shell脚本生成的电子邮件中通常会引入一个随机空间。

以下是我的shell脚本中的代码段:

function sendAlertEmail {

res=`hive -e 'set hive.cli.print.header=false;set hive.execution.engine=tez;select rule_id,kpi_area,rule_desc,cast(current_result as decimal(5,2)),current_run_ts,cast(previous_result as decimal(5,2)),previous_run_timestamp,email_id from email_alert;' | tr -s '\t' '|'`

size=${#res[@]}

table_body=
IFS=$'\n'
for lines in $res
do
  IFS='|' read -r -a array <<< "$lines"
  table_body="$table_body <tr><td>${array[0]}</td><td>${array[1]}</td><td>${array[2]}</td><td>${array[3]}</td><td>${array[4]}</td><td>${array[5]}</td><td>${a
rray[6]}</td></tr>"
  email_id=${array[7]}
done

if [[ -z $table_body ]];then
  echo "No records found"
  exit 0
fi

table_body="<table border='1'><thead><th>RULE_ID</th><th>KPI_AREA</th><th>RULE_DESC</th><th>CURRENT_RESULT</th><th>CURRENT_RUN_TIMESTAMP</th><th>PREVIOUS_RESULT
</th><th>PREVIOUS_RUN_TIMESTAMP</th></thead><tbodY>$table_body</tbody></table>"
table_body="$table_body <br/><i>This is an automated email. Do not reply to this email"
(cat <<END; echo -e $table_body) | /usr/sbin/sendmail -t
Subject: Alert Email
From:
To: $email_id
Content-Type: text/html;
X-Priority: 1

END
}

随附的是随机空间收到的电子邮件的屏幕截图。

Email Screenshot

请注意“无线”一词在第五条记录中的空格。此空间是随机的,每次调用电子邮件功能时,它不会出现在同一位置。

任何人都可以让我知道是什么原因导致引入随机空间吗?

1 个答案:

答案 0 :(得分:1)

您正在将HTML构造为单个长行。

Outlook在行长方面存在一些问题,它在一定数量的字符后插入新行。这一新行在字词上造成了这种差距。有时,它未插入单词内,然后显示得很好。

解决方案是在HTML标签之间插入刹车。 像这样:

def is_test(a):
    x = a
    y = a
    print(x is y)

is_test(257)
is_test('a' * 21)

与第一个table_body="<table border='1'> <thead><th>RULE_ID</th> <th>KPI_AREA</th> <th>RULE_DESC</th> <th>CURRENT_RESULT</th> <th>CURRENT_RUN_TIMESTAMP</th> <th>PREVIOUS_RESULT </th><th>PREVIOUS_RUN_TIMESTAMP</th> </thead> <tbodY>$table_body</tbody> </table>" 循环相同。

也不要忘记检查所有代码是否与包含换行符的变量一起正常工作。例如,应将变量for lines用引号引起来:echo -e $table_body