我正在尝试使用以下方法计算文件夹中包含的文件的平均熵:
{ 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
提到的命令有什么问题?
你只是缺少了拖尾底线
—
gniourf_gniourf 2014年
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 2014年
{ 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
吗?会容易得多。