对两个文件的内容进行计算

对两个文件的内容进行计算

file1contains100作为其内容,并且file2contains 200。我如何在终端中对这两个数字进行计算?假设我想对这两个数字进行除法。我的方法是echo $(cat file1)/$(cat file2),但是它打印了100/200。我想将除法的值作为输出。

我的初衷是从终端找出我的机器的电池百分比。下面有两个文件/sys/class/power_suply/BAT1,分别是energy_nowenergy_full。要获取当前电池电量的百分比,我需要获取以下值100 * energy_now / energy_full

答案1

给猫剥皮的方法有很多种。根据您的 shell 版本,您可以执行“算术扩展”(参见man bash):

> echo $(($(cat file1)/$(cat file2)))
0

零是不能令人满意但正确的结果,因为bash只能进行整数算术。反转文件,结果更加明显:

> echo $(($(cat file2)/$(cat file1)))
2

如果您的系统安装了bcman bc- 任意精度计算器语言),请尝试

> echo "scale=2; $(cat file1)/$(cat file2)" | bc
.50

而且,有大量的文本处理和/或脚本语言(awkperlpython等)可以轻松产生您想要的结果。

答案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) 并使用它来设置比例。下一个命令是,它将顶部的两个数字从堆栈中弹出并除以它们。然后它将结果推回堆栈。该命令打印堆栈最顶层的数字(除法的结果)。2002echok/p

相关内容