2009-07-06 35 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和這裏回聲作爲算術運算的運算符而不是打印。 因此,我添加了回顯「$部門」打印價值。請讓我知道這對你有沒有用。謝謝。