【发布时间】:2023-02-01 07:05:46
【问题描述】:
这是一个有点奇怪的查询,可能更多地证明了我对 bash 的无知,而不是一个简单的帮助请求。再一次,有人可能会给出完美的答案——这会让我省去很多头疼的事情。
我想创建一个简单的 gnuplot 命令来生成一个图,重复不同的数据。虽然目前我可能不得不将数据保存到 /dev/shm 中的临时文件中,但我真的不想这样做。当我本能地做的是通过管道传递数据时,感觉就像是不必要的复杂性。然而,就在我认为我怀疑它的时候(感谢theozh),实验证明我错了。
我从文件 stack.gp 开始,如下所示:
### bar chart with conditional color
data = '/dev/stdin'
lhb = ARG1
myColor(col) = (_s=strcol(col), _s eq lhb ? 0xff3333 : 0x3333ff)
set style fill solid 0.5
set key noautotitle
stats data using 0:2 nooutput
set label 1 at STATS_max_x, STATS_mean_y sprintf("mean=%.1f",STATS_mean_y) offset 0,0.7 right
plot data using 0:2:(myColor(1)):xtic(1) w boxes lc rgb var, \
STATS_mean_y w l lw 2 lc "web-green"
据我了解,这里重要的是:
- 第一行,存放传入数据的地方;和
- 事实上,该数据被处理了不止一次(因为我可以轻松地做我想做的事,只要我没有 stats 命令)。
数据是一个非常简单的两列表:
A 8 B 6 C 4 D 3我可以使用以下命令生成输出:
< test.dat gnuplot --persist -c stack.gp 'C'完美的!但它不是,因为它使用了一个临时文件 (test.dat)。什么我实际上打算做的是通过管道输入数据,类似于这种方法:
cat otherfile.txt | awk ... | gnuplot -c stack.gp 'C'这不适用于原始脚本(没有有效数据点),但如果我删除我的统计命令以便数据只处理一次,它确实有效。因此,让我们尝试其他几种方法:
- 数据 = '<猫'
- 数据='-'
(1) 再次工作一次通过, 但否则给出“x 范围无效”(2) 要么给“x 范围无效”或者“在文件中找不到有效的数据点”取决于 1 遍或 2 遍处理。啊!
那么,还有另一种方法吗?曾经可能是我首先开始使用 gnuplot 的原因,它是 perl 帮助程序脚本feedgnuplot。但是,到目前为止,我也没有设法使它正常工作。
帖子 https://unix.stackexchange.com/questions/671446 更详细一些。类似讨论:how to make several plots from the same standard input data in gnuplot?
固执,逻辑表明这是可能的,因为我可以创建随机测试数据(使用设置表 $Data) 然后进行分析。如果我能做到这一点,那么我肯定可以用管道数据的内容填充 $Data 吗?使用标准输入时我显然没有正确填充它......
有解决办法吗?或者这对于当前版本的 gnuplot 来说是不可能的吗?
【问题讨论】: