如何计算 bash 中的倒数?

How to sum reciprocals in bash?

我正在尝试求一列数字的倒数之和。为了说明我正在尝试做的事情,这里有一个基本示例:

随着文件:

1  
2  
3  
4

我将尝试计算 1/11/21/31/4 的总和。是否有一个简单的 bash 单行代码可以做到这一点? (我是 bash 的新手,所以欢迎解释!)

你可以这样做:

sed 's|^|1/|' file | paste -sd+ | bc -l
  • sed 's|^|1/|'1/ 添加到每一行
  • paste -sd+ 用加号连接所有行,创建算术表达式 1/1+1/2+1/3+1/4
  • bc -l 计算该算术表达式并输出结果

如果您要查找算术级数,可以使用 bash 单行代码 bc 命令

d=0; for c in {1..4}; do d=`echo "$d + 1/$c" | bc -l`; done; echo "$d"

它的输出是1 + 0.5 + 0.3333 + 0.25 =

2.08333333333333333333

它的工作原理是

  1. 将名为 d 的变量设置为 0
  2. 创建一个从 1 数到 4 的 for 循环
  3. for 循环中,它将 d 变量设置为新值 $d + 1/$c 传递给执行算术 bc -l 命令的
  4. 并使用 echo 命令输出值