使用printf更正指数输出

时间:2013-12-06 06:11:12

标签: bash printf echo tr

我尝试编写一个脚本。使用此脚本,我需要删除从某些命令输出解析的输出数字末尾的返回托架。所以我需要将它们转换为整数。但printf不会按照我想要的方式格式化数字:

echo $var
2.80985e+09
var=$(printf "%s" "$var" | tr -dc '[:digit:]' )
echo $var
28098509

正如您所看到的,printf删除了托架,但也修改了变量的值。但我希望这个值保持不变,只返回回车。我应该在printf中使用哪个参数?

由于

3 个答案:

答案 0 :(得分:0)

也许你想这样做:

$ printf "%f\n" $var
2809850000.000000

或者这个:

$ printf "%f\n" $var | sed -e 's/\..*//'
2809850000

答案 1 :(得分:0)

printf没有修改变量的值; tr做到了。您可以通过以下方式验证:

$ printf "%s\n" "$var"
2.80985e+09
$ printf "%s\n" "$var" | tr -dc '[:digit:]'
28098509

tr命令,如下所示,删除所有非数字字符。

答案 2 :(得分:0)

你的tr命令说'删除所有非数字',所以就这样做了。你应该期望程序完全按照你告诉他们的方式完成。整个var=$(...)序列很奇怪。要删除回车,您可以使用:

var=$(tr -d '\013' <<< $var)

<<<重定向发送字符串(值$var)作为命令的标准输入。