awk 在 gnuplot 命令的第二部分或子图中不起作用
Posted
技术标签:
【中文标题】awk 在 gnuplot 命令的第二部分或子图中不起作用【英文标题】:Awk not working in the second part or sub plot of the gnuplot command 【发布时间】:2020-08-14 22:28:11 【问题描述】:通过 gnuplot,我试图在图表上打印一条平均线,但如果我在第二部分中使用 awk
命令或像这样的第二个子图命令,它不起作用
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
"<awk 'sum += $2 END print sum/NR' iops.1.log" with lines title "avg iops"
但是,如果我直接给出我在 bash 命令行上运行相同的 awk 命令时得到的值,则该行会像这样打印。
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
4590 with lines title "avg iops"
上面的行仅使用第二个子图中的一个值(4590)打印图表中的运行平均线
究竟发生了什么,为什么一定不能正常工作?
【问题讨论】:
【参考方案1】:这可能是一个错误,但幸运的是,您可以在不需要 awk 的情况下计算 gnuplot 中的平均 y 值:
stats "iops.1.log" nooutput
ave=STATS_sum_y/STATS_records
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
ave with lines title "avg iops"
【讨论】:
【参考方案2】:当使用plot "<awk ..."
绘图并且awk
-命令返回单个数字时,您实际上拥有一个带有单个数字的数据文件。
与此相反,调用 plot 4560
会绘制一个 函数,然后在整个 x 范围内绘制该函数。
如果你想坚持使用awk
,或者只是作为替代方案的解释,你可以这样做
avg = system("<awk 'sum += $2 END print sum/NR' iops.1.log")
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
int(avg) with lines title "avg iops"
【讨论】:
【参考方案3】:"<..."
构造提供了一个管道文件。要计算和绘制平均值,您可以使用
背部抽动:
plot "iops.1.log" using ($1/1000):2 with lines title "job 1",\
`awk 'sum += $2 END print sum/NR' iops.1.log` with lines title "avg iops"
【讨论】:
以上是关于awk 在 gnuplot 命令的第二部分或子图中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
sh:gnuplot:在 Gnuplot + Xcode 中找不到命令