我正在尝试绘制多个文件的第1列和第3列,其中每个文件应该绘制为自己的output.png。 我的文件名称如下:
VIB2--135--398.6241
VIB2--136--408.3192
VIB2--137--411.3725
...
文件名中的第一个数字是整数,范围是135-162。第二个数字只是一个十进制数字,值之间没有规则的间距。 基本上我想做这样的事情
plot for [a=135:162] 'VIB2--'.a.'--*' u 1:3 w l
虽然这不起作用,当然,因为'*'只是我从bash知道的占位符,我不知道,如果在gnuplot中有类似的东西。 此外,如上所述,每个文件应该绘制到它自己的output.png中,其中两个数字应该在输出名称中,例如, VIB2--135--398.6241.png。
我尝试为此创建一个bash脚本,如(已编辑):
#!/bin/bash
for file in *
do
gnuplot < $file
set xtics 1
set xtics rotate
set terminal png size 1920,1080 enhanced
set output $file.png
plot "$file" u 1:3 w l
完成 但我还是得到了
gnuplot> 1 14 -0.05
^
line 0: invalid command
gnuplot> 2 14 0.01
^
line 0: invalid command
...
实际上是我输入文件中的数字。所以gnuplot认为,我想绘制的数字是命令......?此外,当到达文件的末尾时,我收到以下错误消息
#PLOT 1
plot: an unrecognized command `0x20' was encountered in the input
plot: the input file `VIB2--162--496.0271' could not be parsed
我已经看到了一些类似于我的问题,但解决方案并没有真正起作用,我无法添加评论,因为我没有声誉。 请帮我解决一下这个。
答案 0 :(得分:1)
gnuplot < $file
启动gnuplot并将$file
的内容作为输入提供给它。这意味着gnuplot现在将尝试执行数据文件中无法工作的命令。
你想要的是&#34; here here&#34;:
gnuplot <<EOF
set xtics 1
set xtics rotate
set terminal png size 1920,1080 enhanced
set output $file.png
plot "$file" u 1:3 w l
EOF
它的作用是:shell读取文本到庄严EOF
的行,替换所有变量,将其放入临时文件,然后启动gnuplot
将临时文件作为输入
请注意文件名不包含空格,否则set output $file.png
将无效。为了安全起见,您应该使用set output "$file.png"
,但我的gnuplot有点生锈。