使用Bash Shell脚本制作一个简单的饼图
以下是我的Bash Shell脚本,我正在执行我的两个Hive SQL查询工作正常。我正在计算这个Bash Shell脚本中的Error Percentage
。使用Bash Shell脚本制作一个简单的饼图
#!/bin/bash
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';"`
mailx -s "LIP Data Quality Report for $DATE_YEST_FORMAT1" -r [email protected] [email protected] <<EOF
Data Successfully loaded into LIP_DATA_QUALITY table
Total Items Purchased: `echo $QUERY1 | awk '{print $1}'`
Total Items MissingorMismatch: `echo $QUERY1 | awk '{print $2}'`
Error Percentage: $QUERY2
EOF
问题陈述: -
我将在$QUERY2
越来越Error Percentage
号。我需要制作一个简单的饼形图,通过使用$QUERY2
中的编号,可以显示Error Percentage
和No Error Percentage
,就像下图使用Bash Shell脚本一样。
我正在SunOS
。这是可能在Bash Shell脚本中做到的吗?任何想法将不胜感激。
更新: -
下面是shell脚本,我使用,我用vi editor
创建。我运行上面的外壳脚本sh -x chart.sh
后得到
1 #! /bin/bash
2
3 TEMP=$(mktemp -t chart)
4 QUERY1=36
5 QUERY2=64
6 cat > $TEMP <<EOF
7 <html>
8 <head>
9 <!--Load the AJAX API-->
10 <script type="text/javascript" src="https://www.google.com/jsapi"></script>
11 <script type="text/javascript">
12
13 // Load the Visualization API and the piechart package.
14 google.load('visualization', '1.0', {'packages':['corechart']});
15
16 // Set a callback to run when the Google Visualization API is loaded.
17 google.setOnLoadCallback(drawChart);
18
19 // Callback that creates and populates a data table,
20 // instantiates the pie chart, passes in the data and
21 // draws it.
22 function drawChart() {
23
24 // Create the data table.
25 var data = new google.visualization.DataTable();
26 data.addColumn('string', 'Title');
27 data.addColumn('number', 'Value');
28 data.addRows([
29 ['Error Percentage', $QUERY1],
30 ['No Error Percentage', $QUERY2]
31 ]);
32
33 // Set chart options
34 var options = {'title':'Errors',
35 'width':400,
36 'height':300};
37
38 // Instantiate and draw our chart, passing in some options.
39 var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
40 chart.draw(data, options);
41 }
42 </script>
43 </head>
44
45 <body>
46 <!--Div that will hold the pie chart-->
47 <div id="chart_div"></div>
48 </body>
49 </html>
50 EOF
51
52 # open browser
53 case $(uname) in
54 Darwin)
55 open -a /Applications/Google\ Chrome.app $TEMP
56 ;;
57
58 Linux|SunOS)
59 firefox $TEMP
60 ;;
61 esac
62
错误 -
bash-3.00$ sh -x chart.sh
chart.sh: syntax error at line 3: `TEMP=$' unexpected
任何想法将不胜感激。
另一个更新: -
下面的建议后,当我试图这样的事情,我有另一个错误。
bash-3.00$ bash -x chart.sh
++ mktemp -t chart
mktemp: failed to create file: /tmp/chart
+ TEMP=
+ QUERY1=36
+ QUERY2=64
+ cat
chart.sh: line 6: $TEMP: ambiguous redirect
另一个更新:取得了一些进展我猜。不知道输出文件将在哪里?或者它会打开浏览器?
bash-3.00$ bash -x chart.sh
++ mktemp -t chart
+ TEMP=/tmp/chart
+ QUERY1=36
+ QUERY2=64
+ cat
++ uname
的作成的非常简单的方式Google Chart:
#! /bin/bash
TEMP=$(mktemp -t chart.XXXXX)
QUERY1=36
QUERY2=64
cat > $TEMP <<EOF
<html>
<head>
<!--Load the AJAX API-->
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
// Load the Visualization API and the piechart package.
google.load('visualization', '1.0', {'packages':['corechart']});
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);
// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {
// Create the data table.
var data = new google.visualization.DataTable();
data.addColumn('string', 'Title');
data.addColumn('number', 'Value');
data.addRows([
['Error Percentage', $QUERY1],
['No Error Percentage', $QUERY2]
]);
// Set chart options
var options = {'title':'Errors',
'width':400,
'height':300};
// Instantiate and draw our chart, passing in some options.
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>
</head>
<body>
<!--Div that will hold the pie chart-->
<div id="chart_div"></div>
</body>
</html>
EOF
# open browser
case $(uname) in
Darwin)
open -a /Applications/Google\ Chrome.app $TEMP
;;
Linux|SunOS)
firefox $TEMP
;;
esac
,如果你将它保存为chart.sh
然后运行它作为
$ bash -x chart.sh
或
$ chmod +x chart.sh
$ ./chart.sh
,让你像
请注意,您只需要bash
和互联网连接,没有什么安装。
mktemp
应在Solaris(http://docs.oracle.com/cd/E23824_01/html/821-1461/mktemp-1.html)中可用。如果你没有它,只需将TEMP设置为你希望HTML输出的文件即可。
感谢dtmilano,建议。我试着在bash shell脚本中粘贴整个命令。但我有一些错误。我更新了我的问题,我正在运行的shell脚本以及我得到的错误。任何建议将不胜感激。在运行这个shell脚本之前,我还需要安装任何东西吗? – ferhan 2012-08-12 22:05:59
感谢dtmilano的编辑。我做了一些进步,但我得到了另一个错误 - “bash-3.00 $ bash -x chart.sh ++ mktemp -t图表 mktemp:未能创建文件:/ tmp /图表 + TEMP = + cat chart.sh:第4行:$ TEMP:模糊重定向 + open -a'/ Applications/Google Chrome.app' chart.sh:第51行:open:command not found '。我也更新了这个问题。 – ferhan 2012-08-13 00:43:50
再次感谢dtmilano的编辑。我又取得了一些进展。这次我没有任何错误。我只是想知道,我将如何看到输出?它会打开浏览器?或者它会将png文件保存在我的机器上。用运行shell脚本后得到的输出更新我的问题。或者它会给我一个HTML文件,那么我需要查看HTML文件的实际结果来看? – ferhan 2012-08-13 04:52:31
仅在shell中创建饼图的简单方法是生成一个svg图像。
生成其他图像类型的简单/小程序是Ploticus。 http://ploticus.sourceforge.net/doc/welcome.html
看看['gnuplot'](http://www.gnuplot.info)。 – chepner 2012-08-11 22:15:36