Domanda

Questo fa parte del mio codice 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

Comunque ho avuto problemi come:

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

Qual è il problema? thx

modifica: Due se loop in mio script:

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

Sembra per primo, solo "%" lavori

E per il secondo, solo "/" lavori

Sono confuso

È stato utile?

Soluzione

L'operatore di divisione è /, non %.

Anche bash non ha carri allegorici. La soluzione è di fare qualcosa di simile

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

o

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

Altri suggerimenti

BASH è un senza tipo di programmazione lingua senza aritmetica in virgola mobile. Tuttavia, si può fare operazioni in virgola flotaing utilizzando il bc attrezzo. A seguito di un articolo ben spiega come: http://www.linuxjournal.com/content/floating -point-math-bash . Quello che vi serve da lì è la funzione float_cond().

Vorrei usare awk.

Ecco alcuni esempi.

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

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

Come suggerito da @Amadan , siamo in grado di fare qualcosa di simile in tutto awk -

a=44
b=5
c=$(awk 'BEGIN { print '$a'/'$b' }')
awk 'BEGIN{if ('$c'>.7) print "yeah"; else print "nope" }'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top