And this works too:
echo '(2.1+2.1)/2' | bc -l
Ah, mas você tentou:
echo '(2.1+2.1)/2' | tr -d '\n' | bc -l
(standard_in) 1: syntax error
Usar echo -n
realizará a mesma coisa - não há nova linha final e esse é o seu problema.
Estou tentando calcular a entropia média dos arquivos contidos em uma pasta 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
sendo um executável que calcula a entropia de Shannon de um arquivo, fornecendo saídas do formato:
$ entropy foo
foo: 5.13232
O comando acima mencionado com erros:
(standard_in) 1: syntax error
No entanto, a saída gerada parece não ter 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
E isso também funciona:
$ echo '(2.1+2.1)/2' | bc -l
2.1
O que há de errado com o comando mencionado?
bc
tem uma sintaxe bastante particular. dc
é menos exigente:
find . -type f -exec entropy \{\} + |
sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' |
dc
Eu penso que faz o que você está tentando fazer, mas eu não estou totalmente certo. Um exemplo de saída maior que uma única linha ajudaria.