我有以下问题:
我想使用一个循环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.'.dat
sed
i
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
) 的工作。