Estoy intentando calcular la entropía promedio de los archivos contenidos en una carpeta 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
siendo un ejecutable que calcula la entropía de Shannon de un archivo, dando resultados de la forma:
$ entropy foo
foo: 5.13232
El comando antes mencionado falla con:
(standard_in) 1: syntax error
Sin embargo, el resultado generado parece no tener problemas:
$ { 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
Y esto también funciona:
$ echo '(2.1+2.1)/2' | bc -l
2.1
¿Qué hay de malo con el comando mencionado?
Respuesta1
Y esto también funciona:
echo '(2.1+2.1)/2' | bc -l
Ah, pero ¿lo intentaste?
echo '(2.1+2.1)/2' | tr -d '\n' | bc -l
(standard_in) 1: syntax error
El uso echo -n
logrará lo mismo: no hay una nueva línea final, y ese es su problema.
Respuesta2
bc
tiene una sintaxis bastante particular. dc
es menos exigente:
find . -type f -exec entropy \{\} + |
sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' |
dc
Ipensareso hace lo que intentas hacer, pero no estoy totalmente seguro. Sería útil una muestra de salida más grande que una sola línea.