Von Stdin empfangene Zahlen können nicht mit BC summiert werden

Von Stdin empfangene Zahlen können nicht mit BC summiert werden

Ich versuche, die durchschnittliche Entropie der in einem Ordner enthaltenen Dateien wie folgt zu berechnen:

{ 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

entropyist eine ausführbare Datei, die die Shannon-Entropie einer Datei berechnet und Ausgaben in der Form liefert:

$ entropy foo
foo: 5.13232

Der oben genannte Befehl gibt den folgenden Fehler aus:

(standard_in) 1: syntax error

Die generierte Ausgabe scheint jedoch keine Probleme aufzuweisen:

$ { 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

Und das funktioniert auch:

$ echo '(2.1+2.1)/2' | bc -l
2.1

Was ist falsch an dem genannten Befehl?

Antwort1

Und das funktioniert auch:echo '(2.1+2.1)/2' | bc -l

Ah, aber haben Sie versucht:

echo '(2.1+2.1)/2' | tr -d '\n' | bc -l
(standard_in) 1: syntax error

Die Verwendung echo -nvon bewirkt dasselbe – es gibt keine abschließende neue Zeile, und das ist Ihr Problem.

Antwort2

bchat eine ziemlich spezielle Syntax. dcist weniger wählerisch:

find . -type f -exec entropy \{\} + |
sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' |
dc

ICHdenkendas tut, was Sie versuchen, aber ich bin nicht ganz sicher. Eine Ausgabeprobe, die größer als eine einzelne Zeile ist, wäre hilfreich.

verwandte Informationen