我有一个gnuplot脚本(模板)看起来像这样(稍微缩短一点):
#!/bin/bash
F1=file_1
F2=file_2
pdffile=output.pdf
#
term="terminal pdfcairo enhanced fontscale .3 lw 3"
out="output '$pdffile'"
#
gnuplot -persist << EOF
#
set $term
set $out
#
call "statistic-file.txt"
#
# ... (some formating instructions removed)
#
plot "$F1" w l lt 1 lc rgb "red" t "Graph1" ,\
"$F2" w l lt 1 lc rgb "green" t "Graph2"
EOF
okular $pdffile
F1 F2是我的数据文件的变量。通过&#34;呼叫&#34;命令我尝试包含&#34; statistic-file.txt&#34;其中也使用变量F1 F2。这个文件看起来像这样(也缩短了):
#
stats "$F1" u 2 nooutput name "Y1_"
stats "$F1" u 1 every ::Y1_index_min::Y1_index_min nooutput
X1_min = STATS_min
stats "$F1" u 1 every ::Y1_index_max::Y1_index_max nooutput
X1_max = STATS_max
#
# etc
#
set label \
front center point pt 6 lc rgb "red" ps 1.0 \
at first X1_max,Y1_max tc rgb "red" \
sprintf("%.0f kW / %.0f°", Y1_max, X1_max)
执行脚本,我收到一条错误消息:
"statistic-file.txt", line 2: Invalid substitution $F
粘贴&#34; statistic-file.txt&#34;的内容进入模板文件,然后它的工作原理。看起来第二个文件中的变量与模板文件中的变量无关。我更喜欢2文件解决方案,但如何解决呢?有什么帮助吗?
答案 0 :(得分:2)
一种解决方案可能是将这些变量的定义移动到正在生成的Gnuplot模板中并直接使用它们,即
#!/bin/bash
pdffile=output.pdf
#
term="terminal pdfcairo enhanced fontscale .3 lw 3"
out="output '$pdffile'"
#
gnuplot -persist << EOF
#
F1="file_1"
F2="file_2"
set $term
set $out
#
call "statistic-file.txt"
#
# ... (some formating instructions removed)
#
plot F1 w l lt 1 lc rgb "red" t "Graph1" ,\
F2 w l lt 1 lc rgb "green" t "Graph2"
EOF
文件statistic-file.txt
中也需要进行类似的更改,例如stats F1 u 2 nooutput name "Y1_"
而不是stats "$F1" u 2 nooutput name "Y1_"
。
答案 1 :(得分:2)
您正在混合使用bash变量和gnuplot变量。 $F1
是一个bash变量,仅在bash脚本中被bash替换。在“statistic-file.txt”中,bash什么都不替换,gnuplot抱怨未知$F1
。
您可以尝试将bash变量$F1
“转换”为gnuplot变量datafile1
,如下所示:
#!/bin/bash
F1="file_1"
gnuplot -persist << EOF
datafile1="$F1"
call "statistic-file.txt"
plot datafile1 w lp
EOF
使用以下statistic-file.txt:
stats datafile1
然后bash用相应的文件名替换$F1
,gnuplot使用自己的变量datafile1
,即使在随后调用的“statistic-file.txt”中也是如此。
仅为完整性:错误消息“无效替换$ F”来自gnuplot 4,gnuplot 5抱怨“没有数据锁名为$ F1”。