2009-07-06 50 views
66

我必须要变量,而且我想找到一个由另一个划分的值。我应该使用哪些命令来执行此操作?如何在Linux控制台中进行分割?

+1

这是真的与编程有关吗? [http://stackoverflow.com/faq] – 2009-07-06 17:26:33

+3

查阅本文:[http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html] (http://www.basicallytech.com/blog/index.php?/archives/23-command-line-calculations-using-bc.html) – freitass 2009-07-06 17:08:21

+1

@ frank-v Bash可以用于编程......另外,该链接到常见问题解答不起作用 – chomp 2016-06-18 01:52:44

回答

5

我假设你的意思是你的意思是你的意思是Bash

如果XY是你的变量,$(($X/$Y))返回你要求的。

+1

您不需要$的变量 – Draemon 2009-07-06 17:14:03

62

在bash shell中,围绕算术表达式与$((...))

$ echo $((7/3)) 
2 

虽然我觉得你是有限的整数。

+10

是的,bash仅限于整数数学。 – mkb 2009-07-06 18:17:24

2

使用bash的$ B分$一个整数除法的例子:

echo $((a/b)) 
8

在bash,如果你不需要在你的部门小数,你可以这样做:

>echo $((5+6)) 
11 
>echo $((10/2)) 
5 
>echo $((10/3)) 
3 
11

我仍然更喜欢使用dc,这是一个RPN计算器,所以快速会话以67位除以18以4位精度看起来像

>dc 
4k 
67 
18/p 
3.7222 
q 
> 

显然,更多的可供选择:人直流

+4

几个指针可能会保存一些'man`的行程:RPN =反向波兰表示法;简而言之:您首先输入操作数,然后输入操作员。输出结果需要终止'p'。上述计算的非交互式版本是:`dc -e'4k 67 18/p``。警告:未设置精度(使用“{numPlaces} k”)默认为0,即整数除法。 – mklement0 2013-10-27 21:39:06

16

更好的办法是使用“BC”,一个任意精度的计算器。

variable=$(echo "OPTIONS; OPERATIONS" | bc) 

例如:

my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc) 

其中 “标度= 5” 的精度。

man bc 

附带几个使用示例。

+1

很酷;有一点需要注意:除非你指定`-l`,否则`scale`缺省设置为整数除法,因为下面的@raytrace注释显然默认给出了20位小数位,但是也加载了一个带有附加函数的库。 – mklement0 2013-10-27 21:38:25

36
echo 5/2 | bc -l 

2.50000000000000000000

在 'BC' 这个 '-l' 选项允许浮动的结果

2

别的东西,你可以做使用光线追踪的答案。您可以使用反引号来使用另一个shell调用的stdout,然后进行一些计算。例如,我想知道几个文件中前100行的文件大小。从wc -c的原始大小是以字节为单位,我想知道千字节。下面是我所做的:

echo `cat * | head -n 100 | wc -c`/1024 | bc -l 
11

您可以使用awk这是一种实用工具/语言设计的数据提取

例如为1.2/3。4

>echo 1.2 3.4 | awk '{ print $2/$1 }' 
0.352941 
1

你应该尝试使用:

echo "scale=4;$variablename/3"|bc 
1

你也可以用perl -e

perl -e 'print 67/8' 
-1

我也有同样的问题。划分整数很容易,但十进制数并不容易。 如果你有2个数字,如3.14和2.35,然后划分数字, 的代码将会是Division = echo 3.14/2.35 | bc echo“$ Division” 引号是不同的。不要混淆,它位于键盘上的esc按钮下方。 唯一的区别是| BC和这里回声作为算术运算的运算符而不是打印。 因此,我添加了回显“$部门”打印价值。请让我知道这对你有没有用。谢谢。