结合 Shell 和 Gnuplot 脚本

结合 Shell 和 Gnuplot 脚本

我有以下问题:

我想使用一个循环file1.dat, file2.dat, ...在一个输出图中绘制来自不同文件(在本例中命名)的数据。我在 shell 脚本中使用它来执行此操作:

plot for [i=1:6] u 1:2 'file'.i.'.dat'

现在我还想只绘制每个文件中特定范围的行。为此,我学会了使用:

plot "<(sed -n '1,100p' file.dat)"  u 1:2

无论如何,如果我想将这两者结合起来:

plot for [i=1:6] "<(sed -n '1,100p' file'.i.'.dat)"  u 1:2

显然,给出i文件名的表达式中不能将其解释为变量。我得到的错误是:file'.i.'.datsedi

sed: can't read file_.i..dat: No such file or directory

您对如何规避这个问题或其他方法来实现我的目标有什么建议吗?

答案1

你必须改变:

plot for [i=1:6] "<(sed -n '1,100p' file'.i.'.dat)"  u 1:2

到:

plot for [i=1:6] "<(sed -n '1,100p' file".i.".dat)"  u 1:2

请注意引号是如何变化的。字符串从一个双引号转到另一个双引号。在你的行中只有一个字符串<(sed -n '1,100p' file'.i.'.dat),这不是你想要的。在我的行中,有两个字符串<(sed -n '1,100p' file.dat)与 的值连接在一起i

此外,无需sed打印文件的前 100 行,这通常是head( head -n 100) 的工作。

相关内容