关于这篇文章:用 KB/MB/GB/TB/PB... 后缀总结数字
我有几台机器上装有较旧的 Debian 版本,并且无法升级到较新版本的 Debian,这意味着该coreutils
软件包不包含numfmt
. 我试图找到另一种方法来获取它(machine is Debian 7.6)
,但我被迫使用另一种方法来获取我的磁盘大小。
我目前正在使用以下内容:
lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1 | sed -e 's/[^0-9]/ /g' | paste -sd+ | bc
我可以轻松获得大小,但我也需要获得 GB/TB 甚至 MB。
如果我使用:
lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1
我明白了
160GB
160GB
在我的其他机器上,我会举个例子:
2TB
2TB
2TB
有没有办法在变量中的数字之后保存单词然后打印出来?
此外,为了消除机器拥有多个不同尺寸的驱动器的机会,例如
500GB
2TB
3TB
这样我的命令很遗憾地不起作用,它会给你505.
我没有
lshw
方便的命令,所以我伪造了一些如下:(我在网上找到了一个示例,并简单地复制了“size:”行并组成了一些尺寸)。
我在这里使用 awk 是因为一旦你发现自己
grep
ping 和cut
ting 和sed
ing,将所有逻辑组合到awk
.下面的 awk 脚本将字段分隔符 (
FS
) 设置为左括号和右括号,以便更自然地提取所需的值。它还(冗余地)将运行总大小(以 Gb 为单位)初始化为零。每次 awk 看到与(简单)正则表达式匹配的输入行时,
size:
它都会在大括号内开始真正的工作。括号内的值在字段 #2 中结束,因此我们要求 awk 匹配该字段中的数字。我们希望它们从位置 1 开始,对于一些字符。然后根据该长度提取该值,后缀是字符串的其余部分。然后,我们仔细研究可能的后缀列表(根据需要扩展),并将当前大小乘以适当的比率(Stéphane 在对当前删除的答案的评论中提到基于 1000 个单位)。
消耗完所有输入后,awk 以 GB 为单位打印总大小。
将脚本保存到文件中并像这样运行它
脚本: