результат деления bash по сравнению с float - PullRequest
0 голосов
/ 28 ноября 2011

Это часть моего кода 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

edit: два цикла if в моем скрипте:

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

Кажется, для первого работает только "%"

И только для второго "/"работает

Я в замешательстве

Ответы [ 3 ]

4 голосов
/ 28 ноября 2011

Оператор деления /, а не %.

Также у bash нет поплавков. Обходной путь должен сделать что-то вроде

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

или

if (( 10 * $b >= 7 * $d ))
3 голосов
/ 28 ноября 2011

BASH - это типичный язык программирования без арифметики с плавающей точкой.Однако вы можете выполнять операции с плавающей точкой с помощью инструмента bc .Следующая статья хорошо объясняет, как: http://www.linuxjournal.com/content/floating-point-math-bash.Оттуда вам нужна функция float_cond().

2 голосов
/ 29 ноября 2011

Я бы использовал 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" }'
...