bash将结果与浮动相比较

时间:2011-11-28 19:39:52

标签: bash floating-point divide

这是我的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

HOwever我遇到了以下问题:

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

问题是什么? THX

编辑: 我的脚本中有两个if循环:

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

似乎第一个,只有“%”工作

对于第二个,只有“/”有效

我很困惑

3 个答案:

答案 0 :(得分:4)

除法运算符为/,而不是%

bash也没有花车。解决方法是执行类似

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

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

答案 1 :(得分:3)

BASH是一种没有浮点运算的无类型编程语言。但是,您可以使用 bc 工具执行floting-point操作。以下文章很好地解释了如何:http://www.linuxjournal.com/content/floating-point-math-bash。你需要的是float_cond()函数。

答案 2 :(得分: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" }'