Resultado de la división de bash en comparación con el flotador
-
22-10-2019 - |
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
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" }'