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
entropy
ist 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 -n
von bewirkt dasselbe – es gibt keine abschließende neue Zeile, und das ist Ihr Problem.
Antwort2
bc
hat eine ziemlich spezielle Syntax. dc
ist 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.