将Gnuplot变量传递到shell表达式

5

我正在尝试在 gnuplot 中获取文件的第一个元素:

data = "file.dat"
x = `cat data | head -n 2 | tail -n 1 | awk '{print $1}'`

但是这一直给我以下错误:
no such file or directory

我应该写类似于以下的代码: x = cat $data | head -n 2 | tail -n 1 | awk '{print $1}' (带有美元符号)
显然,这也是不正确的。
有任何想法吗?
2个回答

7

You need to use a

set macro

然后使用符号@获取变量data的值(在Gnuplot中,@类似于bash中的$)。

因此,这应该是有效的。

x = `cat @data | head -n 2 | tail -n 1 | awk '{print $1}'`

2
没错,那个可行。但是必须记住,宏扩展只在反引号内起作用,而不在单引号和双引号内起作用。为了说明这一点,请考虑以下示例:表达式“set macros; col="1"; print echo @col”输出“1”,这是正确的,但是“set macros; col="1"; print echo "@col"”会因为未扩展宏而退出并报错。但这只是一个小细节 :) - Christoph

7

除了使用反引号外,另一种可能性是使用system函数。然后您可以构建任何字符串并将其作为shell表达式运行:

data = 'file.dat'
x = system("head -n 2 ".data." | tail -n 1 | awk '{print $1}'")

1
抱歉,我不小心给这个答案点了踩,当我意识到后已经无法更改。我进行了一个微不足道的编辑来修正它。 - Miguel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接