Gnuplot在for循环中使用stats

时间:2014-08-02 08:34:31

标签: statistics gnuplot ntp

我想将不同文件的最大值和平均值绘制成一个图。 我有几个ntp-stats,所以我想:

input = "./peerstats/s_peerstats.201407"
set terminal svg size 600 400
set xlabel "Day in July (s)"
set ylabel "Jitter (ms)"
set yrange[0:0.65]

set output "ntpq_month_07.svg"
do for [k=10:31]{
    stats input.k."_pps" using ($8*1000.0) nooutput name "PPS",\
    stats input.k."_rz1" using ($8*1000.0) nooutput name "RZ1",\
    stats input.k."_rz2" using ($8*1000.0) nooutput name "RZ2",\
    set "ntpq_month_07.svg" 
    print ($k):PPS_max
    print ($k):RZ1_max
    print ($k):RZ2_max
    print ($k):PPS_mean
    print ($k):RZ1_mean 
    print ($k):RZ2_mean
}

这是gnuplot的错误:

    ;
    stats input.k."_pps" using ($8*1000.0) nooutput name "PPS", stats input.k."_rz1" using ($8*1000.0) nooutput name "RZ1", stats input.k."_rz2" using ($8*1000.0) nooutput name "RZ2", set "ntpq_month_07.svg" ;
    print ($k):PPS_max;
    print ($k):RZ1_max;
    print ($k):RZ2_max;
    print ($k):PPS_mean;
    print ($k):RZ1_mean ;
    print ($k):RZ2_mean;

                                                          ^
line 20: Expecting [no]output or prefix

语法错在哪里?

非常感谢:)!

1 个答案:

答案 0 :(得分:0)

首先,您必须在单独的一行中拥有所有stats命令。这很好。然后是你的print语法被破坏了。

考虑文件test.dat

1
2

和电话

do for [i=10:11] {
    stats 'test.dat' using 1 nooutput name "PPS"
    stats 'test.dat' using ($1*i) nooutput name "RZ1"
    print sprintf("max(PPS_%d): %f", i, PPS_max)
    print sprintf("max(RZ1_%d): %f", i, RZ1_max)
}

给出输出

max(PPS_10): 2.000000
max(RZ1_10): 20.000000
max(PPS_11): 2.000000
max(RZ1_11): 22.000000

所以你的脚本应如下所示:

input = "./peerstats/s_peerstats.201407"
set terminal svg size 600 400
set xlabel "Day in July (s)"
set ylabel "Jitter (ms)"
set yrange[0:0.65]

set output "ntpq_month_07.svg"
do for [k=10:31]{
    stats input.k."_pps" using ($8*1000.0) nooutput name "PPS"
    stats input.k."_rz1" using ($8*1000.0) nooutput name "RZ1"
    stats input.k."_rz2" using ($8*1000.0) nooutput name "RZ2"
    set "ntpq_month_07.svg" 
    print sprintf('%d: %f', k, PPS_max)
    print sprintf('%d: %f', k, RZ1_max)
    print sprintf('%d: %f', k, RZ2_max)
    print sprintf('%d: %f', k, PPS_mean)
    print sprintf('%d: %f', k, RZ1_mean)
    print sprintf('%d: %f', k, RZ2_mean)
}

当然,你的svg文件不包含任何输出,因为你不会绘制任何内容。