Pregunta

Esto es parte de mi código de 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

Sin embargo, tengo problemas como:

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

¿Cuál es el problema? gracias

Editar: dos si los bucles en mi script:

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

Parece para el primero, solo funciona "%"

Y para el segundo, solo "/" funciona

estoy confundido

¿Fue útil?

Solución

El operador de división es /, no %.

También Bash no tiene carrozas. La solución es hacer algo como

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

o

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

Otros consejos

Bash es un lenguaje de programación tintinoso sin aritmética de punto flotante. Sin embargo, puede hacer operaciones de punto de flota utilizando el antes de Cristo herramienta. El siguiente artículo explica bien cómo: http://www.linuxjournal.com/content/floating-point-math-bash . Lo que necesitas de allí es el float_cond() función.

yo usaría awk.

Aquí hay unos ejemplos.

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

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

Como lo sugiere @Amadan, podemos hacer algo como esto completamente en awk -

a=44
b=5
c=$(awk 'BEGIN { print '$a'/'$b' }')
awk 'BEGIN{if ('$c'>.7) print "yeah"; else print "nope" }'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top