使用shell脚本发送电子邮件并附加查询的输出

时间:2012-08-08 21:33:54

标签: shell unix hadoop solaris hive

下面是我的shell脚本,我正在运行两个Hive SQL查询。哪个工作正常。

#!/bin/bash

DATE_YEST_FORMAT2=`perl -e 'use POSIX qw(strftime); print strftime "%Y%m%d",localtime(time()- 3600*96);'`
echo $DATE_YEST_FORMAT2

hive -e "
set mapred.job.queue.name=data-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"

我正在运行上面的shell脚本 -

sh -x test.sh

问题陈述: -

如果你看到我的第一个SELECT查询,它会给我两列作为OUTPUT,sum_items_purchased的SUM和total_items_missingormismatch的SUM。我的第二个SELECT将给出这些列的百分比。

我需要使用上面的SHELL SCRIPT在电子邮件中发送这三个详细信息。基本上我需要在电子邮件中发送这三件事。

从第一个查询 - 我需要发送 -

total_items_purchased and total_items_missingormismatch

从第二个查询 - 我需要发送 -

Percentage that I am calculating.

电子邮件可以是这样或更好的方法 -

Total Items Purchased:- Some Number
Total Items MissingorMismatch:- Some Number
Error Percentage:- Some Percentage

任何建议都将受到赞赏。

更新

在我的Shell脚本中进行更改后,我运行了下面的shell脚本 -

#!/bin/bash

QUERY1 = `hive -e "
set mapred.job.queue.name=data-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='20120804';`

QUERY2 = `hive -e "
set mapred.job.queue.name=data-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='20120804';"`

echo "Total items purchased: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "Error Percentage: $QUERY2"

我得到的输出我不认为是对的吗?脚本出了什么问题?当我运行SunOS时:

bash-3.00$ sh -x emailtest.sh
+ hive -e
set mapred.job.queue.name=data-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='20120804';
+ QUERY1 = 3443837 448750
emailtest.sh: QUERY1: not found
+ hive -e
set mapred.job.queue.name=data-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='20120804';
+ QUERY2 = 13.030523802375084
emailtest.sh: QUERY2: not found
+ awk {print $1}
+ echo
+ echo Total items purchased:
Total items purchased:
+ awk {print $2}
+ echo
+ echo Total Items MissingorMismatch:
Total Items MissingorMismatch:
+ echo Error Percentage:
Error Percentage:

脚本中很少有部分工作正常,但我认为最后三个echo语句工作不正常。

1 个答案:

答案 0 :(得分:1)

我的解决方案,无可否认是老派,将使用awk通过将以下内容附加到您的脚本来解析输出:

QUERY1=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT SUM(total_items_purchased), SUM(total_items_missingormismatch) from lip_data_quality where dt='$DATE_YEST_FORMAT2';`

QUERY2=`hive -e "
set mapred.job.queue.name=hdmi-technology;
SELECT 100 * SUM(total_items_missingormismatch*1.0) / SUM(total_items_purchased) FROM lip_data_quality where dt='$DATE_YEST_FORMAT2';"`

echo "Total items purchased: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`"
echo "Error Percentage: $QUERY2"

这些天,我会在Python中做这样的事情。但是Awk仍然有它的用途。