2011-11-28 62 views
0

這是我的bash代碼的一部分;bash除法結果與浮點數比較

 b=`cat 101127_2_aa_1.fastq|head -$a|tail -1|sed 's/\(.\)B*$/\1/g'|wc -c` 
     d=`cat 101127_2_aa_1.fastq|head -$a|tail -1|wc -c` 
     if (($b%$d>=0.7)) 
     then 

但是我得到了像問題:

line 13: ((: 26%100>=0.7: syntax error: invalid arithmetic operator (error token is ".7") 

什麼問題? THX

編輯: 兩個,如果在我的腳本循環:

if (($a%4==0)) 
if ((10*$b/$d>= 7)) 

似乎是第一位的,只有 「%」 的作品

而對於第二個,只有 「/」 的作品

我很困惑

+1

擊不具有浮動。 – Amadan

+0

thx ....但是我該怎麼辦? – user815408

+1

你是想得到模數,還是你想分解和搞砸操作符?如果是模數,那麼你更好地描述你在做什麼,在浮點模上使用模... :)你的變量名稱不利於易讀性。如果它是你想要的分區,那麼'($ b * 10)/ $ d> = 7'應該可以工作。 – Amadan

回答

4

除法運算符是/而不是%

此外bash沒有浮動。解決辦法是做類似

if ((10 * $b/$d >= 7)) 

if ((10 * $b >= 7 * $d)) 
+0

我猜他想要模運算符......但從代碼判斷,也許分裂是他真正想要的。 :) – DejanLekic

+0

是的,部門是我想要的 – user815408

+0

然而,關於運營商,當我如果(($ a%4 == 2)),它的工作非常好。所以「%」和「/」,...我很困惑.... – user815408

2

我會用awk

以下是一些示例。

[jaypal:~] awk 'BEGIN{ print 44/3 }' 
14.6667 

[jaypal:~] a=55 
[jaypal:~] b=4 
[jaypal:~] awk 'BEGIN { print '$a'/'$b' }' 
13.75 

至於建議由@Amadan,我們可以做這樣的事情完全awk -

a=44 
b=5 
c=$(awk 'BEGIN { print '$a'/'$b' }') 
awk 'BEGIN{if ('$c'>.7) print "yeah"; else print "nope" }' 
+0

不,它仍然不起作用。似乎bash不能直接比較任何東西與浮動(在這種情況下,$ c)...但仍然非常感謝 – user815408

+1

如果您打算使用'awk',或'bc',或'perl'或Ruby或任何外部到'bash',在那裏做比較,因爲'bash'根本不能處理小數點。問題不在分區(這只是不精確) - 問題出現在'0.7'字面上(在你的解決方案中,也是13.75),'bash'根本無法解析。 – Amadan

+0

謝謝@Amadan,我改變了我的答案。 –