Sto cercando di calcolare l'entropia media dei file contenuti in una cartella usando:
{ echo '('; find . -type f -exec entropy {} \; | \
grep -Eo '[0-9.]+$' | \
sed -r 's/$/+/g'; echo '0)/';
find . -type f | wc -l; } | \
tr -d '\n' | bc -l
entropy
essendo un eseguibile che calcola l'entropia di Shannon di un file, fornendo output del modulo:
$ entropy foo
foo: 5.13232
Il comando sopra citato si risolve con:
(standard_in) 1: syntax error
Tuttavia, l'output generato sembra non avere problemi:
$ { echo '('; find . -type f -exec entropy {} \; | \
grep -Eo '[0-9.]+$' | \
sed -r 's/$/+/g'; echo '0)/'; \
find . -type f | wc -l; } | \
tr -d '\n'
(5.13232+2.479+1.4311+0)/3
E funziona anche questo:
$ echo '(2.1+2.1)/2' | bc -l
2.1
Cosa c'è di sbagliato nel comando citato?
bc
comando: confronta printf '(5.13232+2.479+1.4311+0)/3' | bc -l
con echo '(5.13232+2.479+1.4311+0)/3' | bc -l
. (il tuo tr -d '\n'
comando rimuove la nuova riga finale bc
necessaria).
{ cat; echo; }
tra il tr
e il bc
: tr -d '\n' | { cat; echo; } | bc -l
o sostituire la tr -d '\n'
parte con:{ tr -d '\n'; echo; }
paste -sd'\0' -
invece di tr -d '\n'
per conservare l'ultimo carattere di nuova riga. (vedi anche paste -sd+ -
per unire le linee con +
).
awk
? Sarebbe sostanzialmente più semplice.