【问题标题】:Explanation to an assignment作业说明
【发布时间】:2016-08-11 21:08:59
【问题描述】:

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

(()) = 我的笔记

作业是:

一个程序 (prog.exe)((给定这个程序)),它从名为 input.in 的输入数据文件中读取 2 个整数 (m, n) 和 1 个双精度 (a) .例如,给定文件中的示例 input.in 包含值

5 7 1.23456789012345

当您运行 ./prog.exe 时,输出是一长列浮点数

除了程序之外,还有一个名为 ain.in 的文件,其中包含一长列双精度值。

将 prog.exe 和 ain.in 复制到工作目录

编写一个执行以下操作的 bash 脚本:

-为所有的组合运行 ./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 编码任务,我仍在努力掌握它,更好的解释会非常有帮助。再次感谢!

【问题讨论】:

    标签: bash awk variable-assignment pseudocode


    【解决方案1】:

    受@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}'
    

    【讨论】:

      【解决方案2】:

      这个想法是编写一个 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 in average.in。

      【讨论】:

      • 使用sedawk 选择特定行可能比tail | head 更好。
      • 真;将tail | head 替换为sed
      【解决方案3】:

      这是在没有显式循环的情况下生成所有输入组合的一种方法

      join -j9 <(join -j9 <(seq 0 10) <(seq 0 5)) ain.in | cut -d' ' -f2-
      

      【讨论】:

      • 甜蜜!不知道加入存在。
      猜你喜欢
      • 2018-05-12
      • 2017-06-14
      • 2020-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 2023-03-24
      • 2020-08-09
      相关资源
      最近更新 更多