[英]Gnuplot: Iterate over folders
我有不同的文件夹,其中包含名为 eg 的数据集
3-1-1
3-1-2
3-2-1
3-1-2
第一个占位符是固定的,第二个和第三个是列表的元素:
k1values = "1 2"
k2values = "1 2"
我想在我的 Gnuplot 脚本中做一些简单的操作,例如cd
到上面的目录并读取一行文本文件。 首先,它应该cd
到文件夹,读取文件并再次 cd 回来等。
我的第一个 (1) 想法是连接system
命令和sprintf
:
do for[i=1:words(k1values)]{
do for[j=1:words(k2values)]{
system sprintf("cd 3-%d-%d", i, j)
system 'pwd'
system 'cd ..'
}
}
正在打印相同的路径,所以根本没有 CD 发生。 或system 'cd sprintf("3-%d-%d", i, j)'
不幸的是,这是行不通的。 错误消息: sh: 1: Syntax error: "(" unexpected
我还尝试将值连接到一个字符串并将其作为路径输入:这也不起作用:
k1values = "1 2"
k2values = "1 2"
string1 = '3'
do for[i=1:words(k1values)]{
do for[j=1:words(k2values)]{
path = sprintf("%s-%d-%d", string1, i, j)
system sprintf("cd %s", path)
system 'pwd'
system 'cd ..'
}
}
我打印了测试路径,但是运行路径根本没有改变。 提前致谢!
编辑:给定伪代码中的想法是这样的:
do for k1
do for k2
valueX = <readingCommand>
make dir "3-k1-k2/Pictures"
for int i = 0; i<valueX; i++
set output bla
plot "3-k1-k2/Data/i.txt" <options>
end for
end do for
end do for
除非有什么我们还不知道的原因,为什么要在子目录中来回切换? 为什么不通过 function 创建路径/文件名并加载所需的文件和 plot 所需的行?
例如,如果您具有以下目录结构:
CurrentFolder
3-1-1
Data.dat
3-1-2
Data.dat
3-2-1
Data.dat
3-2-2
Data.dat
和以下文件:
3-1-1/Data.dat
1 1.14
2 1.15
3 1.12
4 1.11
5 1.13
3-1-2/Data.dat
1 1.24
2 1.25
3 1.22
4 1.21
5 1.23
3-2-1/Data.dat
1 2.14
2 2.15
3 2.12
4 2.11
5 2.13
3-2-2/Data.dat
1 2.24
2 2.25
3 2.22
4 2.21
5 2.23
下面的示例从相应的子目录加载所有文件Data.dat
并绘制第 2 到 4 行(这些行具有从 0 开始的索引,检查help every
)。
脚本:
### plot specific lines from files from different directories
reset session
k1values = "1 2"
k2values = "1 2"
string1 = '3'
myPath(i,j) = sprintf("%s-%s-%s",string1,word(k1values,i),word(k2values,j))
myFile(i,j) = sprintf("%s/%s",myPath(i,j),"Data.dat")
set key out
plot for [i=1:words(k1values)] for[j=1:words(k2values)] myFile(i,j) \
u 1:2 every ::1::3 w lp pt 7 ti myPath(i,j)
### end of script
结果:
这是我最后的解决方案,例如
k1values = '0.5 1'
k2values = '0.5 1'
omega = 3
do for[i in k1values]{
do for[j in k2values]{
savingPoint = system('head -n 1 "3-'.i.'-'.j.'/<fileName>.dat" | tail -1')
number = savingPoint/<value>
do for[m = savingPoint:0:-<value>]{
set title <...>
set output <...>
plot ''.omega.'-'.i.'-'.j.'/Data/'.m.'.txt' <...>
}
}
}
<...>
是一个占位符,无关紧要。 所以这就是我最终遍历文件夹的方式。 在第二个for
循环中,执行读取命令并将其分配给第三个 for 循环中需要的变量。 i 和 j 虽然是字符串,但这并不重要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.