file1
contains100
作为其内容,并且file2
contains 200
。我如何在终端中对这两个数字进行计算?假设我想对这两个数字进行除法。我的方法是echo $(cat file1)/$(cat file2)
,但是它打印了100/200
。我想将除法的值作为输出。
我的初衷是从终端找出我的机器的电池百分比。下面有两个文件/sys/class/power_suply/BAT1
,分别是energy_now
和energy_full
。要获取当前电池电量的百分比,我需要获取以下值100 * energy_now / energy_full
答案1
给猫剥皮的方法有很多种。根据您的 shell 版本,您可以执行“算术扩展”(参见man bash
):
> echo $(($(cat file1)/$(cat file2)))
0
零是不能令人满意但正确的结果,因为bash
只能进行整数算术。反转文件,结果更加明显:
> echo $(($(cat file2)/$(cat file1)))
2
如果您的系统安装了bc
(man bc
- 任意精度计算器语言),请尝试
> echo "scale=2; $(cat file1)/$(cat file2)" | bc
.50
而且,有大量的文本处理和/或脚本语言(awk
、perl
、python
等)可以轻松产生您想要的结果。
答案2
有一个特殊的工具可以做到这一点 -calc
做
$ sudo apt install calc
$ man calc
所有命令行或脚本内计算需求都将得到解决。
如果您使用 bash 作为 shell,则可以使用一些原始算术。但这只是整数。如果您需要小数点 - calc
.
答案3
使用任意精度dc
计算器,首先将两个数字压入计算器堆栈,将小数位数设置为2(即计算结果保留两位小数),计算两个数字的除法,并打印结果:
{ cat file1 file2; echo '2k/p'; } | dc
dc
是一个计算器,使用逆波兰表示法。在上面的命令中,将从两个文件和的输出中dc
给出100
和。第一个命令是,它将从堆栈中弹出最顶部的数字 (2) 并使用它来设置比例。下一个命令是,它将顶部的两个数字从堆栈中弹出并除以它们。然后它将结果推回堆栈。该命令打印堆栈最顶层的数字(除法的结果)。200
2
echo
k
/
p