如何在Bash脚本中使用sed或awk为数字字符串添加点分隔符
问题:为百万级数字添加点分隔符
我正在编写Bash脚本,生成的百万级数字(如123456789)需要添加点分隔符,格式示例为123.456.789。现有脚本如下:
a=100000000 b=100000000 c=100000000 tvusd=$(echo $(($a+$b+$c))) echo $tvusd # 输出:300000000
期望输出为:300.000.000,请问如何用sed或awk实现?
解决方案
使用sed实现
利用sed的循环替换功能,从数字末尾开始每三位插入一个点:
echo $tvusd | sed ':a;s/\B[0-9]\{3\}\>/&./;ta'
逻辑说明:
:a定义循环标签s/\B[0-9]\{3\}\>/&./匹配非单词边界后接的连续三位数字,在其后添加点分隔符ta若替换成功,跳回标签a继续处理,直到无法匹配更多三位数字段
执行后输出:
300.000.000
使用awk实现
通过字符串截取和循环拼接,从后往前分割数字并添加分隔符:
echo $tvusd | awk '{ num = $0 res = "" while (length(num) > 3) { res = "." substr(num, length(num)-2, 3) res num = substr(num, 1, length(num)-3) } print num res }'
逻辑说明:
- 循环截取数字末尾的三位片段,拼接到结果字符串前并添加点
- 最后将剩余的开头部分与拼接好的结果组合输出
执行后输出同样为:
300.000.000
内容的提问来源于stack exchange,提问作者ateneam
相关产品推荐
相关产品推荐

