You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 04:57:07