gnuplot和Shell脚本读取许多文件并创建图形
好的,我正在尝试为一组不同的数据文件(总共9个)绘制图形,因此我创建了以下shell脚本:gnuplot和Shell脚本读取许多文件并创建图形,shell,gnuplot,scripting-language,Shell,Gnuplot,Scripting Language,好的,我正在尝试为一组不同的数据文件(总共9个)绘制图形,因此我创建了以下shell脚本: !/bin/bash datastorenum=9 PlotOutputLoc=/root/bin/SANscripts/graphs PlotGname=datastore Pfext=png PlotInputName=desktop PNext=dat PlotInputLoc=/root/bin/SANscripts/inputdata write_plotgraph() { i
!/bin/bash
datastorenum=9
PlotOutputLoc=/root/bin/SANscripts/graphs
PlotGname=datastore
Pfext=png
PlotInputName=desktop
PNext=dat
PlotInputLoc=/root/bin/SANscripts/inputdata
write_plotgraph()
{
i=1
while [ $datastorenum != $i ]
do
gnuplot <<- EOF
set term png large size 1200,1024
set output "$PlotOutputLoc/$PlotGname-$i.$Pfext"
set xdata time
set timefmt '%H:%M'
set style data lines
set ylabel "IOs-Avg-%-kb"
set ytics 50
set autoscale
set xlabel "Hour"
plot "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:2 title "Total IOs", "$PlotInputLoc/$PlotInputName-$i.$PNext " using 1:3 title "Read %", "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:4 title "CacheHit %", "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:5 title "Current Kb/sec", "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:6 title "Maximum Kb/sec", "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:7 title "Current IO/sec", "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:8 title "Maximum IO/sec"
i=$(( $i + 1 ))
EOF
done
}
write_plotgraph
谢谢你的帮助
好,那么现在如果我想传递另一个函数呢?我喜欢这个函数只对totalio进行绘图
write_plotTios()
{
i=1
while [ $datastorenum != $i ]
do
gnuplot <<- EOF
set term png large size 1200,1024
set output "$PlotOutputLoc/$PlotGname-$i-$TIOS.$Pfext"
set xdata time
set timefmt '%H:%M'
set style data lines
set ylabel "IOs-Avg-%-kb"
set ytics 50
set autoscale
set xlabel "Hour"
plot "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:2 title "Total IOs"
EOF
i=$(( $i + 1 ))
done
}
write_plotTios
传递给“plot”命令的一个参数后面有一个尾随空格。这可能被解释为文件名的一部分。删除尾随空格,然后查看行为是否有所改善 可以多次使用构造“
$PlotInputLoc/$PlotInputName-$i.$PNext
”。您可能会发现将其存储为变量而不是反复复制/粘贴同一内容不太容易出错(而且可读性更高)
另外,递增
i
变量的代码位于传递给gnuplot的脚本中。bash变量i
永远不会被更新,因此将持续循环。尝试交换EOF
和i=$($i+1))
行。它们都是desktop-1.dat
还有,gnuplot的版本是什么?不管怎样,我必须从EOF中删除空格,因为它现在可以工作了。我如何为$PlotInputLoc/$PlotInputName-$i.$PNext定义变量?@user1814718-与定义任何其他shell变量的方式相同。尝试将infle=“$PlotInputLoc/$PlotInputName-$i.$PNext”
添加到while循环内部,但不在here文档外部。
write_plotTios()
{
i=1
while [ $datastorenum != $i ]
do
gnuplot <<- EOF
set term png large size 1200,1024
set output "$PlotOutputLoc/$PlotGname-$i-$TIOS.$Pfext"
set xdata time
set timefmt '%H:%M'
set style data lines
set ylabel "IOs-Avg-%-kb"
set ytics 50
set autoscale
set xlabel "Hour"
plot "$PlotInputLoc/$PlotInputName-$i.$PNext" using 1:2 title "Total IOs"
EOF
i=$(( $i + 1 ))
done
}
write_plotTios
/plot_datastore1t.sh: line 54: warning: here-document at line 37 delimited by end-of-file (wanted `EOF')
./plot_datastore1t.sh: line 55: syntax error: unexpected end of file