BC - 末尾没有“\\n”+以零开头?

BC - 末尾没有“\\n”+以零开头?

这是一个bc输出,例如:

输入:

echo "scale=10; BLA-BLA-HERE-NOT-IMPORTANT" | bc

输出:

.3708446283953709207058828124021300754352578903651372655882743141882\
77124645102027246581819139527644919407424570060822470537797066353573\
96635.8038454068 days

两个问题:

  • 输出可以四舍五入为“0.3708...”之类的值吗?
  • 我可以删除末尾的“\n”-s吗?

我在 中找不到任何最大宽度选项bc

答案1

使用 的 GNU 实现bc,您可以设置一个环境变量,BC_LINE_LENGTH该变量将禁用反斜杠 + 换行符功能或扩展它。较新的版本允许您使用 0 值来禁用它,如下所示:

BC_LINE_LENGTH=0 bc <<<"2^4096"

旧版本没有“0 关闭”功能,需要您将该值设置为足够大的值,以便它不会影响您:

BC_LINE_LENGTH=10000 bc <<<"2^4096"

如果您经常使用 bc 并且不喜欢换行,那么这似乎是在 shell 中设置的一个很好的环境变量。如果您正在使用bash,只需将其放入您的.bashrc

export BC_LINE_LENGTH=0

答案2

你可以尝试这样的代码:

echo "scale = 4;  3.5678/3" | bc | tr '\n' ' '

设置scalebc应该完成舍入工作。您可以用您想要的命令替换除法部分。的输出bc再次通过管道传输到tr,它将换行符 ( \n) 转换为空格。对于上述命令,我得到以下输出:

1.1892 user@localhost:~/codes$

答案3

$ OUT=$(bc <<< "2 ^ 256")
$ echo "$OUT"
11579208923731619542357098500868790785326998466564056403945758400791\
3129639936

$ OUT=${OUT//$'\\\n'/}
$ echo "$OUT"
115792089237316195423570985008687907853269984665640564039457584007913129639936

答案4

所以也许只是为我自己回答,但一切的结合就是

BC_LINE_LENGTH=10000 bc -l <<< "scale=200;1/3" | tr "\n" " "

例如能源消耗的计算

BC_LINE_LENGTH=10000 bc -l <<< "scale=2;`cat /sys/class/power_supply/BAT1/energy_now`/1000000"

相关内容