【发布时间】:2018-04-07 14:46:59
【问题描述】:
我目前有一个 bash 脚本,它提供了诸如 26084729776630091742 之类的数字。此数字已转换为 26,084729776630091742,最后 18 位为小数位,但如何在 bash 中转换?
(我要转换的数字是一个名为 WEI 的以太坊单位,最后 18 个数字是小数位。所以在前 2 个数字后添加一个点不起作用。)
【问题讨论】:
我目前有一个 bash 脚本,它提供了诸如 26084729776630091742 之类的数字。此数字已转换为 26,084729776630091742,最后 18 位为小数位,但如何在 bash 中转换?
(我要转换的数字是一个名为 WEI 的以太坊单位,最后 18 个数字是小数位。所以在前 2 个数字后添加一个点不起作用。)
【问题讨论】:
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/'
【讨论】:
您要查找的内容类似于:"${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}"
以 18 位小数打印 26084,729776630091742133(如果 ${#str} > 18 则可以正常工作)
【讨论】:
${str:0:-18},${str:${#str}-18}.
bash 4.2 中添加了对负长度的支持。