J'essaie de calculer l'entropie moyenne des fichiers contenus dans un dossier en utilisant:
{ 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
étant un exécutable qui calcule l'entropie Shannon d'un fichier, donnant des sorties de la forme:
$ entropy foo
foo: 5.13232
La commande susmentionnée génère des erreurs avec:
(standard_in) 1: syntax error
Cependant, la sortie générée semble n'avoir aucun problème:
$ { 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
Et cela fonctionne aussi:
$ echo '(2.1+2.1)/2' | bc -l
2.1
Quel est le problème avec la commande mentionnée?
bc
commande: comparer printf '(5.13232+2.479+1.4311+0)/3' | bc -l
avec echo '(5.13232+2.479+1.4311+0)/3' | bc -l
. (votre tr -d '\n'
commande supprime la nouvelle ligne de fin qui a bc
besoin).
{ cat; echo; }
entre le tr
et le bc
: tr -d '\n' | { cat; echo; } | bc -l
ou de remplacer la tr -d '\n'
pièce par:{ tr -d '\n'; echo; }
paste -sd'\0' -
au lieu de tr -d '\n'
pour conserver le dernier caractère de nouvelle ligne. (voir aussi paste -sd+ -
pour joindre des lignes avec +
).
awk
? Ce serait beaucoup plus facile.