Bash
無法使用 bc 對從 stdin 收到的數字求和
我正在嘗試使用以下方法計算文件夾中包含的文件的平均熵:
{ 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
上述命令有什麼問題?
這也有效:
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
將完成同樣的事情——沒有終止換行符,這就是你的問題。
bc
有一些非常特殊的語法。dc
不那麼挑剔:find . -type f -exec entropy \{\} + | sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' | dc
我認為這可以滿足您的要求,但我並不完全確定。大於單行的輸出樣本會有所幫助。