フォルダに含まれるファイルの平均エントロピーを計算しようとしています:
{ 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
上記のコマンドの何が問題になっていますか?
bc
コマンドの最後の行が欠落しているだけです:と比較printf '(5.13232+2.479+1.4311+0)/3' | bc -l
してくださいecho '(5.13232+2.479+1.4311+0)/3' | bc -l
。(このtr -d '\n'
コマンドは、bc
必要な末尾の改行を削除します)。
簡単な修正は挿入することです
—
gniourf_gniourf
{ cat; echo; }
間tr
およびbc
:tr -d '\n' | { cat; echo; } | bc -l
または交換することtr -d '\n'
で一部を:{ tr -d '\n'; echo; }
の
—
ステファンChazelas
paste -sd'\0' -
代わりに使用tr -d '\n'
して、最後の改行文字を保持します。(でpaste -sd+ -
行を結合することも参照してください+
)。
awk
よろしいですか?かなり簡単になります。