bc不喜欢以科学符号表示的数字(又称指数符号)。
$ echo "3.1e1*2" | bc -l (standard_in) 1: parse error
但是我需要使用它来处理以这个符号表示的几个记录。有没有办法让bc了解指数符号?如果没有,我可以做些什么来将它们翻译成bc会理解的格式?
不幸的是,bc不支持科学记数法。
但是,它可以被翻译成bc可以处理的格式,使用sed:
通过使用
value=`echo ${value} | sed -e 's/[eE]+*/\\*10\\^/'`
您可以用“* 10 ^”替换“e”(或“e”,如果指数为正),那么bc会及时了解。即使指数为负,或者数字随后乘以另一个功率,并且允许跟踪有效数字,这也是可行的。
编辑:感谢jwpat7和Paul Tomblin澄清sed语法的方面。
编辑:
正如奥马伊指出的那样,这也可以在纯粹的黑社会中完成。只需使用
value=${value/[eE]+*/*10^}
完成与上述完全相同的操作。