如何计算 bash 中的倒数?
How to sum reciprocals in bash?
我正在尝试求一列数字的倒数之和。为了说明我正在尝试做的事情,这里有一个基本示例:
随着文件:
1
2
3
4
我将尝试计算 1/1
、1/2
、1/3
和 1/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
它的工作原理是
- 将名为
d
的变量设置为 0
- 创建一个从 1 数到 4 的
for
循环
- 在
for
循环中,它将 d
变量设置为新值 $d + 1/$c
传递给执行算术 bc -l
命令的
- 并使用
echo
命令输出值
我正在尝试求一列数字的倒数之和。为了说明我正在尝试做的事情,这里有一个基本示例:
随着文件:
1
2
3
4
我将尝试计算 1/1
、1/2
、1/3
和 1/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
它的工作原理是
- 将名为
d
的变量设置为0
- 创建一个从 1 数到 4 的
for
循环 - 在
for
循环中,它将d
变量设置为新值$d + 1/$c
传递给执行算术bc -l
命令的 - 并使用
echo
命令输出值