【问题标题】:Dividing elements in two arrays with Bash用 Bash 划分两个数组中的元素
【发布时间】:2022-11-22 23:33:43
【问题描述】:

我有两个数组: x=43035000 51065000 67085000 36770000 57165000 54335000 46590000 64410000 39295000 37210000 41800000 和 y=397 420 349 300 387 417 365 567 321 314 341

我想将 x 中的第一个数字除以 y 中的第一个数字,x 中的第二个数字除以 y 中的第二个数字,依此类推......

我努力了:

因为我在“${x[@]}”;在“${y[@]}”中为 j 做;执行 awk“{print $i/$j}”;完毕;完毕

然而它只是列出 x 中的数字,然后是 y 中的数字:

43035000 51065000 67085000 36770000 57165000 54335000 46590000 64410000 39295000 37210000 41800000 397 420 349 300 387 417 365 567 321 314 341

【问题讨论】:

    标签: bash for-loop division


    【解决方案1】:

    假设两个数组包含相同数量的元素并且所有元素都是数字,您可以在 bash 中使用 C 风格的 for 循环:

    x=(43035000 51065000 67085000 36770000 57165000 54335000 46590000 64410000 39295000 37210000 41800000)
    y=(397 420 349 300 387 417 365 567 321 314 341)
    for ((i=0; i<${#x[@]}; ++i)); do echo "${x[i]} ${y[i]}"; done |
        awk '{print $1/$2}'
    

    或者,如果您只需要整数截断除法,则可以使用 shell 算术(在这种情况下不需要 awk):

    for ((i=0; i<${#x[@]}; ++i)); do echo $((x[i] / y[i])); done
    

    【讨论】:

      【解决方案2】:

      您应该像这样将变量传递给 awk

      $ x=(43035000 51065000 67085000 36770000 57165000 54335000 46590000 64410000 39295000 37210000 41800000)
      $ y=(397 420 349 300 387 417 365 567 321 314 341)
      $ for i in "${x[@]}"; do 
          for j in "${y[@]}";
              do awk -v I=${i} -v J=${j} 'BEGIN{print I / J}'; 
      done; done;
      

      但你不会这样吗?

      $ for (( i=0; i<${#x[@]}; i++ )); 
      do 
          awk -v I=${x[$i]} -v J=${y[$i]} 'BEGIN{print I / J}';
      done
      

      【讨论】:

      • 您将所有 X 与所有 Y 相除:X[1]/Y[1], X[2]/Y[1], X[3]/Y[1],这不是作者想要的:他或她想要 X[1]/Y[1], X[2]/Y[2], X[3]/Y[3],...
      猜你喜欢
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-04-23
      相关资源
      最近更新 更多