在最后一位数后将十进制数转换为十进制数

时间:2018-04-07 14:46:59

标签: bash awk

我目前有一个bash脚本,它为我提供了诸如 26084729776630091742 之类的数字。这个数字被转换为 26,084729776630091742 ,最后18位是小数位,但我怎么能用bash转换呢?

(我要转换的数字是一个名为WEI的以太坊单位,18个最后的数字是小数位。所以在前两位数之后加点不起作用。)

2 个答案:

答案 0 :(得分:4)

<强> EDIT2:

echo "128084729776630091742" | awk '{gsub(/,/,"");print substr($0,1,length($0)-18) "," substr($0,length($0)-17)}'

编辑: 由于OP更改了示例,因此现在添加此代码。

echo "128,6436xxxx"  | awk '{gsub(/,/,"");print substr($0,1,2) "," substr($0,3)}'

如果您只是寻找这个具体的例子,那么以下内容可能对您有帮助。

echo "26084729776630091742" | awk '{print substr($0,1,2) "," substr($0,3)}'

解决方案第二: 使用sed

echo "26084729776630091742" | sed 's/\(..\)\(.*\)/\1,\2/'

答案 1 :(得分:3)

您正在寻找的是:"${str:0:2},${str:2}"

您案例中的示例:

str="26084729776630091742"
echo "${str:0:2},${str:2}"

打印26,084729776630091742

编辑问题已被准确

str="26084729776630091742133"
echo "${str:0:${#str}-18},${str:${#str}-18}"

打印26084,729776630091742133,小数点后18位(如果${#str}&gt;则可以正常工作18)