对作业的解释

时间:2016-04-19 15:17:31

标签: bash awk variable-assignment pseudocode

正在寻找这个问题的答案。我无法理解在这项任务中应该尝试完成的任务。如果您愿意,我欢迎伪代码或提示。但我真正需要的是解释我需要做什么,以及输出应该是什么/看起来像什么。请不要写出很多代码,虽然我想自己尝试一下。

(())=来自我的说明

作业是:

程序(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编码任务,我仍然试图掌握它,更好的解释将是非常有帮助的。再次感谢!

3 个答案:

答案 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}'