使用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 PercentageNo Error Percentage,就像下图使用Bash Shell脚本一样。

enter image description here

我正在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 
+1

看看['gnuplot'](http://www.gnuplot.info)。 – chepner 2012-08-11 22:15:36

的作成的非常简单的方式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 

,让你像

enter image description here

请注意,您只需要bash和互联网连接,没有什么安装。

mktemp应在Solaris(http://docs.oracle.com/cd/E23824_01/html/821-1461/mktemp-1.html)中可用。如果你没有它,只需将TEMP设置为你希望HTML输出的文件即可。

+0

感谢dtmilano,建议。我试着在bash shell脚本中粘贴整个命令。但我有一些错误。我更新了我的问题,我正在运行的shell脚本以及我得到的错误。任何建议将不胜感激。在运行这个shell脚本之前,我还需要安装任何东西吗? – ferhan 2012-08-12 22:05:59

+0

感谢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

+0

再次感谢dtmilano的编辑。我又取得了一些进展。这次我没有任何错误。我只是想知道,我将如何看到输出?它会打开浏览器?或者它会将png文件保存在我的机器上。用运行shell脚本后得到的输出更新我的问题。或者它会给我一个HTML文件,那么我需要查看HTML文件的实际结果来看? – ferhan 2012-08-13 04:52:31

有可能是这样做的没有原生的办法,所以我认为最好的办法是让安装第三方工具,喜欢 -

PLOTRIX

Documentation

仅在shell中创建饼图的简单方法是生成一个svg图像。

生成其他图像类型的简单/小程序是Ploticus。 http://ploticus.sourceforge.net/doc/welcome.html