Вопрос

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

В чем проблема? спасибо

Изменить: две петли в моем сценарии:

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

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

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

Я смущен

Это было полезно?

Решение

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

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

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

или же

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

Другие советы

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

я хотел бы использовать 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" }'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top