我不正在寻找这个问题的答案。我无法理解在这项任务中应该尝试完成的任务。如果您愿意,我欢迎伪代码或提示。但我真正需要的是解释我需要做什么,以及输出应该是什么/看起来像什么。请不要写出很多代码,虽然我想自己尝试一下。
(())=来自我的说明
作业是:
程序(prog.exe)((我们给出了这个程序))从名为 input.in 的输入数据文件中读取2个整数(m,n)和1个double(a) 。例如,给定文件中的示例input.in包含值
5 7 1.23456789012345
当你运行 ./ prog.exe 时,输出是一个长列的浮点数
除了程序之外,还有一个名为 ain.in 的文件,其中包含一长串双精度值。
将prog.exe和 ain.in 复制到工作目录
编写一个执行以下操作的bash脚本:
对于的所有组合,-Run ./ prog.exe
- M = 0,1,...,10
- N = 0,1,...,5
- a =文件 ain.in
中的每个值- 这实际上是 m,n 上的三重嵌套循环和ain.in值
- 对于上面 m,n 和ain.in值的每个组合:
- 生成相应的输入文件 input.in
- 运行程序并将输出重定向到某个临时输出文件。
- 从此临时输出文件中提取第37和第51个值,并将其存储在名为 average.in
的文件中- 当3个嵌套循环终止时, average.in 文件应包含一长串浮点值。
- 您的脚本应该返回average.in
中包含的值的平均值提示:seq,awk,输出方向,在这里很有用
感谢任何花时间阅读本文的人。 这是我的第二个bash编码任务,我仍然试图掌握它,更好的解释将是非常有帮助的。再次感谢!
答案 0 :(得分:2)
这是生成没有显式循环的所有输入组合的一种方法
join -j9 <(join -j9 <(seq 0 10) <(seq 0 5)) ain.in | cut -d' ' -f2-
答案 1 :(得分:0)
我们的想法是编写一个bash脚本,用于测试具有各种输入条件的prog.exe。这意味着重新创建input.in并多次运行prog.exe。每次运行prog.exe时,input.in应包含不同的三个数字,例如
首先运行:
0 0 <first line of ain.in>
第二轮:
0 0 <second line of ain.in>
。 。 。上次运行:
10 5 <last line of ain.in>
您可以使用seq and for loops来完成此任务。
然后,您需要系统地保存每次运行的输出,例如,
./prog.exe > tmp.out
# extract line 37 and 51 and append to average.ln
sed -n '37p; 51p; 51q' tmp.out >> average.ln
最后,在测试了所有组合后,use awk to compute the average of all the lines的平均值。
答案 2 :(得分:0)
启发自@karakfa的单线:
join -j9 <(join -j9 <(seq 0 10) <(seq 0 5)) ain.in | cut -d' ' -f2- |
sed "s/.*/echo & >input.in;./prog.exe>tmp.out; sed -n '37p;51p;51q' tmp.out/" |
sh | awk '{sum+=$1; n++} END {print sum/n}'