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

Unix环境下如何提取磁盘描述中的首个容量并转换为GB

如何在Unix系统中提取磁盘描述里的首个GB/TB容量并转换为GB单位

我来帮你搞定这个Unix下提取磁盘容量并转换的需求~ 先明确下核心需求:从磁盘描述字符串里定位第一个以GB或TB为单位的容量值,将TB单位转换为GB(按1TB=1000GB计算),最终输出整数形式的GB数值。

需求示例

磁盘描述示例:146GB 10K 2GB FC 23536RPM SATA II 1000GB NX24 623GB 1587K SA55S 15X3.5 DAE UPG X 3TB N 15X3.5 DAE UQ TY 1.8TB 10K SAS 25X2.53 DR 2TB 72PM II FGH DTTR 450GB 15KS 12V 4GB FC UPG
期望输出对应关系:

  • 146GB 10K 2GB FC →146
  • 23536RPM SATA II 1000GB →1000
  • NX24 623GB 1587K SA55S 15X3.5 DAE UPG →623
  • X 3TB N 15X3.5 DAE UQ →3000
  • TY 1.8TB 10K SAS 25X2.53 DR →1800
  • 2TB 72PM II FGH DTTR →2000

解决方案:用Awk脚本处理

Unix环境下用Awk处理这类文本匹配+数值计算的场景最顺手,下面是直接可用的命令:

单条描述处理

如果只是处理单个磁盘描述字符串,直接通过管道把字符串传给Awk即可:

echo "TY 1.8TB 10K SAS 25X2.53 DR" | awk '{
    # 匹配第一个GB/TB格式的容量,捕获数值和单位
    match($0, /([0-9.]+)(GB|TB)/, cap)
    # 根据单位转换:TB转GB,GB直接保留
    if (cap[2] == "TB") {
        printf "%.0f\n", cap[1] * 1000
    } else {
        printf "%.0f\n", cap[1]
    }
}'

运行后会输出1800,完全符合需求。

批量处理多行描述

如果你的磁盘描述是每行一个存储在文件(比如disk_list.txt)里,用这个命令可以批量输出原始描述+转换结果,格式和你期望的完全一致:

awk '{
    match($0, /([0-9.]+)(GB|TB)/, cap)
    if (cap[2] == "TB") {
        printf "%s → %.0f\n", $0, cap[1] * 1000
    } else {
        printf "%s → %.0f\n", $0, cap[1]
    }
}' disk_list.txt

输出示例:

146GB 10K 2GB FC →146
23536RPM SATA II 1000GB →1000
NX24 623GB 1587K SA55S 15X3.5 DAE UPG →623

命令逻辑解释

  • match($0, /([0-9.]+)(GB|TB)/, cap):在当前行文本中匹配第一个符合数字+GB/TB的模式,把数字部分存入cap[1],单位存入cap[2]
  • printf "%.0f\n", ...:将结果格式化为整数输出,避免出现冗余小数(比如1.8TB转换成1800而不是1800.0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:01:32