十进制数转换

时间:2012-04-30 21:30:01

标签: bash numbers decimal

在bash中我试图使用小数(带分数)的数字来编码条件。然后我发现我不能在bash中做小数。 我的脚本如下:

 a=$(awk '/average TM cross section = / {CCS=$6}; END {printf "%15.4E \n",CCS}' ${names}_$i.out)
 a=$(printf '%.2f\n' $a)
 echo $a

*.out文件中,数字是科学记数字。最后,echo $a导致我的数字为245.35(或我文件中的其他数字)。所以,我想知道如何将输出数245.35改为24535,所以我可以在bash中做一个有条件的。

我试图繁殖,这显然不起作用。任何人都可以帮忙进行这种转换吗?

3 个答案:

答案 0 :(得分:1)

你可能最好使用bash以外的其他东西进行算术运算 - 呼唤具有更强大功能的东西。您可能会发现以下链接鼓舞人心或恐怖:http://blog.plover.com/prog/bash-expr.html(“shell脚本中的算术表达式”)和http://blog.plover.com/prog/spark.html(“bash中的疯狂计算”);如果你认真尝试做基于bash的算法,我担心你最终会遇到这种情况。特别是,第二篇文章中的to_rational函数包含了一些使用正则表达式来分割小数的代码,尽管他正在做一些比你听起来更复杂的事情。

答案 1 :(得分:1)

根据我们的扩展对话

 a=$(awk '/average TM cross section = / {CCS=$6}; END {printf "%15d\n",CCS * 100}' ${names}_$i.out)

现在你的输出将是一个整数。

请注意,awk非常适合处理大型文件和测试逻辑。您的全部/大部分处理可能都是在一个awk进程中完成的。如果您正在处理大量数据,则节省的时间可能会很长。

我希望这会有所帮助。

答案 2 :(得分:0)

根据您提供的信息,这与任何算术运算无关。

将其视为字符串。找到小数点并将其删除。这就是我的理解

http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

http://www.thegeekstuff.com/2010/07/bash-string-manipulation/