以下を使用して、フォルダーに含まれるファイルの平均エントロピーを計算しようとしています。
{ 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
ファイルのシャノンエントロピーを計算し、次の形式の出力を返す実行可能ファイルです。
$ entropy foo
foo: 5.13232
前述のコマンドは次のようにエラーになります:
(standard_in) 1: syntax error
ただし、生成された出力には問題はないようです。
$ { 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
これも機能します:
$ echo '(2.1+2.1)/2' | bc -l
2.1
上記のコマンドの何が問題なのでしょうか?
答え1
これも機能します:
echo '(2.1+2.1)/2' | bc -l
ああ、でも試してみましたか:
echo '(2.1+2.1)/2' | tr -d '\n' | bc -l
(standard_in) 1: syntax error
を使用するとecho -n
、同じことが実現されます。つまり、改行文字で終了しないので、これが問題となります。
答え2
bc
かなり特殊な構文があります。dc
はそれほど選択的ではありません:
find . -type f -exec entropy \{\} + |
sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' |
dc
私考えるそれはあなたがやろうとしていることを実行しますが、完全には確信がありません。 1 行よりも大きい出力サンプルがあると役立ちます。