我们都知道gnuplot可以绘制图片,但是时候,我们的数据是以date文件的形式存在,如何编写一个脚本帮助我们绘制出相应的图片:
以某个进程的CPU使用情况为例:
- cat processX_CPU_Usage.log
- Wed Oct 16 14:47:35 CST 2013: Process CPUsage(%) Total
- Wed Oct 16 14:47:37 CST 2013: 1828 17 2008
- Wed Oct 16 14:47:39 CST 2013: 1828 17 1706
- Wed Oct 16 14:47:42 CST 2013: 1828 12 1689
- Wed Oct 16 14:47:44 CST 2013: 1828 21 1673
- Wed Oct 16 14:47:46 CST 2013: 1828 15 1668
- Wed Oct 16 14:47:48 CST 2013: 1828 8 1699
- Wed Oct 16 14:47:50 CST 2013: 1828 17 1699
- Wed Oct 16 14:47:53 CST 2013: 1828 17 2148
- Wed Oct 16 14:47:55 CST 2013: 1828 15 1815
- Wed Oct 16 14:47:57 CST 2013: 1828 32 1727
- Wed Oct 16 14:47:59 CST 2013: 1828 11 1669
- Wed Oct 16 14:48:01 CST 2013: 1828 4 1667
- Wed Oct 16 14:48:03 CST 2013: 1828 8 1678
- Wed Oct 16 14:48:05 CST 2013: 1828 16 1694
- Wed Oct 16 14:48:08 CST 2013: 1828 9 1669
- Wed Oct 16 14:48:10 CST 2013: 1828 26 1750
- Wed Oct 16 14:48:12 CST 2013: 1828 6 1792
- Wed Oct 16 14:48:14 CST 2013: 1828 14 1720
- Wed Oct 16 14:48:17 CST 2013: 1828 12 1800
- Wed Oct 16 14:48:19 CST 2013: 1828 24 1921
- Wed Oct 16 14:48:21 CST 2013: 1828 11 1749
- Wed Oct 16 14:48:23 CST 2013: 1828 9 1708
- Wed Oct 16 14:48:25 CST 2013: 1828 15 1665
- Wed Oct 16 14:48:27 CST 2013: 1828 3 1751
- Wed Oct 16 14:48:30 CST 2013: 1828 10 1692
- Wed Oct 16 14:48:32 CST 2013: 1828 15 1678
- Wed Oct 16 14:48:34 CST 2013: 1828 19 1708
- Wed Oct 16 14:48:36 CST 2013: 1828 14 1707
- Wed Oct 16 14:48:38 CST 2013: 1828 15 1680
- Wed Oct 16 14:48:40 CST 2013: 1828 18 1678
我们看到了输出是这么个情况,我们希望绘制一张简单的图片,把CPU usage的情况绘制出来:每一行的第八列是我们想要的数据,我们可以绘制一个时间序列:
- manu@manu-hacks:~/code/shell/gnuplot$ cat work.sh
- #!/bin/sh
- file=$1
- field=$2
- yfield=`cat $file |awk ’{if(NR==1) print $”’$field”’}’`
- title=`basename $file`
- if [ $# -eq 2 ]
- then
- echo ”
- set terminal pngcairo lw 2
- set title ”$title”
- set ylabel ”$yfield”
- set output ‘./output/$title-$yfield.png’
- plot ”$file” using $field w lp pt 7 title ”$yfield”
- set output
- set terminal wxt
- ” | gnuplot
- fi
我这个方法比较简单,title就是数据来源的文件名字,ylabel是字段名字,实际上,由用户输入title ylabel 以及图例的title会更加合适。我这只是一个简单的sample,来分享如何在shell脚本利用gnuplot绘制图片。
使用命令如下:
使用命令如下:
- ./work.sh /home/manu/processX_CPU_Usage.log 8
输出图片如下:
我这是一个简单的例子,实际上,我们实际可能会跑出来40个进程的CPU使用情况,我们可以将参数写入配置文件,然后每一行去执行 work.sh,这样的话,我们就可以直接维护配置文件就可以了。当然了,我的脚本还很简陋很粗糙粗,远远不能在工程中实际使用。毕竟是晚上捣鼓出来的小 玩意儿。参考文献:
1 使用gnuplot科学画图 马欢
1 使用gnuplot科学画图 马欢
转载请注明:爱开源 » shell脚本利用gnuplot绘制图片