我目前正在运行一个接受输入文件的程序。输入文件有各种参数,其中3个我需要更改,再次运行等。这3个参数的范围是一个15个值,另一个12个值,另一个10个值,所以我有15 * 12 * 10( =1800) 我需要为程序制作的可能输入文件。输出文件名也需要与该运行的参数匹配。显然,手动创建 3375 个输入文件是不切实际的,不仅因为它会耗费时间,而且人为错误的风险也会很大。我需要以下帮助:
改变我的输入文件的参数。我知道这可以使用 AWK 或使用 shell 脚本来完成。输入文件是纯文本(ascii)
每次更改参数时递归运行脚本。假设我的输入文件如下所示:
输入文件模型
A 的值
1
B 的价值
2
C 的值
4
D 的价值
12
假设我要更改的三个参数是 A、B 和 D。假设 A 的每个值间隔 5 个单位,并且我想运行 3 个值。我的 A 可能值将是 {1, 6, 11} 我的 B 可能值间隔 3 个单位,有 4 个值 {2, 5, 8, 11} 和我的 D 值间隔 1 并且有是其中两个 {12, 13} 允许重复值,我想要处理的集合是:
{1、2、12}
{1、5、12}
{1, 8, 12}
{1、11、12}
{1, 2, 13}
{1、5、13}
{1, 8, 13}
{1、11、13}
{6、2、12}
{6、5、12}
{6, 8, 12}
{6、11、12}
{6、2、13}
{6、5、13}
{6、8、13}
{6、11、13}
{11、2、12}
{11、5、12}
{11、8、12}
{11、11、12}
{11、2、13}
{11、5、13}
{11、8、13}
{11、11、13}
其中括号中的每个位置对应于 {A, B, D} 的值
所以我的两个问题本质上是: 1 使用更改的输入文件创建一个包装器以递归方式运行程序 2 更改三个变量,以便我获得每个组合并将相应的输入文件传递给程序。
这是我认为它应该在伪代码中的样子(我知道这是错误的,需要一些帮助):
A = 1
B = 2
D = 12
for B<11,
for A<11,
for D<13,
B+3, A+5, D++, program input file
#input file mockup
#Value for A
Some Expression for {A}
#Value for B
Some Expression for {B}
#Value for C
4
#Value for D
Some Expression for {D}
outputdirectory: mkdir Run.ABD
或类似的东西......
注意:我已经在另一个网站上发布了这个问题,看看是否有其他人可以在那里回答。我不是拖钓或众包;寻求真正的帮助。另外,如果有人感兴趣,我正在运行一个同震位移模型,我需要改变每次运行的深度、长度和位移。我假设整个介质具有线性滑移和均匀粘度。程序很好,可以开始了,我只需要想办法用可变参数改变我的输入文件。
编辑:
我意识到我的逻辑循环应该类似于:
A=1
B=2
D=12
While A<11
While B<11
While D<13
D++
B+3
A+5
请让我知道这是否是正确的想法?我不知道如何存储变量,因此循环的每次迭代都会创建一个新的输入文件或输入参数。
或者可能是这样的?
A=1
While A<11
B = 2
While B<11
D=12
While D<13
D++
B+3
A+5