Gnuplot如何将日志文件grep结果赋值给变量设置yrange?
提取日志数值设置gnuplot yrange最大值的解决方法
日志内容
******************************************************************** maximum disp: 3.2580e-05, at node: 3, of total: 6 maximum disp: 4.2876e-05, at node: 6, of total: 6 ********************************************************************
需求:动态提取日志中of total:后的数字,作为gnuplot的yrange最大值。
错误尝试及问题
尝试1:用双引号包裹命令
myVar = "cat fileName | grep -m 1 'of total:' | cut -d' ' -f9" set yrange[1:myVar]
问题:myVar被赋值为命令字符串本身,而非执行后得到的数值6。
尝试2:直接写shell命令
myVar = cat fileName | grep -m 1 'of total:' | cut -d' ' -f9
问题:gnuplot报错undefined variable: cat,因为它不支持直接在赋值语句中解析shell命令。
正确实现
在gnuplot中,需用**反引号(`)**包裹shell命令来执行并获取输出结果,步骤如下:
方法1:grep+cut组合
# 执行shell命令捕获输出 myVar = `cat fileName | grep -m 1 'of total:' | cut -d' ' -f9` # 将字符串转为数值(确保gnuplot正确识别) myVar = real(myVar) # 设置y轴范围 set yrange[1:myVar]
方法2:用awk简化命令(更高效)
# awk直接匹配目标行并提取数值,找到后立即退出 myVar = `awk '/of total:/ {print $9; exit}' fileName` myVar = real(myVar) set yrange[1:myVar]
说明:
- 反引号`是gnuplot执行外部shell命令并捕获标准输出的专属语法。
real()函数用于将提取到的字符串类型数字转换为数值类型,避免gnuplot将其当作字符串处理。
内容的提问来源于stack exchange,提问作者ben
相关产品推荐
相关产品推荐

