繁体   English   中英

Gnuplot:遍历文件夹

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM