我们都知道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科学画图 马欢
阅读(917) | 评论(0) | 转发(0) |