我正在尝试使用以下方法计算文件夹中包含的文件的平均熵:
{ 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
Run Code Online (Sandbox Code Playgroud)
entropy 作为计算文件的香农熵的可执行文件,给出以下形式的输出:
$ entropy foo
foo: 5.13232
Run Code Online (Sandbox Code Playgroud)
上述命令出错:
(standard_in) 1: syntax error
Run Code Online (Sandbox Code Playgroud)
但是,生成的输出似乎没有问题:
$ { 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
Run Code Online (Sandbox Code Playgroud)
这也有效:
$ echo '(2.1+2.1)/2' | bc -l
2.1
Run Code Online (Sandbox Code Playgroud)
上面提到的命令有什么问题?
gol*_*cks 12
这也有效:
echo '(2.1+2.1)/2' | bc -l
啊,但是你有没有尝试过:
echo '(2.1+2.1)/2' | tr -d '\n' | bc -l
(standard_in) 1: syntax error
Run Code Online (Sandbox Code Playgroud)
使用echo -n将完成同样的事情——没有终止换行符,这就是你的问题。
bc有一些非常特殊的语法。dc不那么挑剔:
find . -type f -exec entropy \{\} + |
sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' |
dc
Run Code Online (Sandbox Code Playgroud)
我认为这可以满足您的要求,但我并不完全确定。大于单行的输出样本会有所帮助。
| 归档时间: |
|
| 查看次数: |
11389 次 |
| 最近记录: |