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

awk中拆分变量的数字与单位:为何ex未获取到单位MB?

问题拆解与解决办法

咱们来一步步看你为啥拿不到想要的单位值:

首先,你的脚本里substr($1, length($1))这个操作,只会取输入字符串的最后一个字符——比如输入139506MB的话,它拿到的是B,而不是完整的MB。然后你用这个单个字符去index("KMGTPEZY", ...)里找,B根本不在这个字符串里,所以index自然返回0啦。

其次,就算你取对了字符,index函数返回的是字符在目标字符串中的位置数字,不是字符本身,它本来就不会直接返回MB哦。

修正后的实用脚本

如果你的需求是拆分出数值和两位单位,同时还想拿到单位首字母在KMGTPEZY中的位置,可以这么写:

echo 139506MB | awk '{
    # 取最后两个字符作为单位
    unit = substr($1, length($1)-1)
    # 取前面所有字符作为数值
    val = substr($1, 1, length($1)-2)
    # 找单位首字母在序列中的位置(从1开始计数)
    ex = index("KMGTPEZY", substr(unit, 1, 1))
    print ex " " val " " unit
}'

运行后会输出:2 139506 MB(因为M在KMGTPEZY里是第2位)。

要是你只需要拆分数值和单位,不需要位置值,直接简化成下面的版本就行:

echo 139506MB | awk '{
    unit = substr($1, length($1)-1)
    val = substr($1, 1, length($1)-2)
    print val " " unit
}'

这个会直接输出139506 MB。

小知识点补充

  • substr函数的语法是substr(字符串, 起始位置, [长度]),如果省略长度参数,会自动取到字符串末尾,所以substr($1, length($1)-1)就能直接拿到最后两个字符,不用特意写长度2。
  • index函数的返回规则是:找到匹配字符就返回它的起始索引(从1开始),找不到就返回0,这也是你之前一直得到0的核心原因。

内容的提问来源于stack exchange,提问作者Sandra Schlichting

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:25:53