我正在努力找出一种方法来总结一行数字。
我有以下代码。
lshw -class disk -class storage | grep size: | cut -d "(" -f2 | cut -d ")" -f1
Run Code Online (Sandbox Code Playgroud)
这给了我结果
2TB
2TB
2TB
2TB
2TB
2TB
Run Code Online (Sandbox Code Playgroud)
在我的另一台机器上:
500GB
1TB
1TB
Run Code Online (Sandbox Code Playgroud)
有没有办法总结这些?我需要保留 GB 或 TB
我完全没问题,它在 GB 中被说出来了,或者只有在有 2 个以上的结果时才将它们相加?我有多台机器,我应该在其中运行此命令。其中一些有 5 个硬盘驱动器,有些只有 1 个。
使用xml或json输出格式提供的工具可能更容易解析这些可用的:
lshw -quiet -class disk -class storage -xml |
xmlstarlet sel -t -v //size -n |
paste -sd + - |
bc |
numfmt --to=si --suffix=B
Run Code Online (Sandbox Code Playgroud)
json:
lshw -quiet -class disk -class storage -json |
jq '[.children[]|.size]|add' |
numfmt --to=si --suffix=B
Run Code Online (Sandbox Code Playgroud)
即使您没有xml/json解析工具,以这些格式输出仍然是可取的,因为您可以获得确切数量的字节开始,因此在从/向人类可读格式转换时不会丢失信息。
然后,您可以恢复到一些基于启发式的解析,例如默认输出格式。使用 GNU grep:
lshw -quiet -class disk -class storage -json |
grep -Po '"size" : \K\d+' |
paste -sd + - |
bc |
numfmt --to=si --suffix=B
Run Code Online (Sandbox Code Playgroud)
将--round=nearest选项添加到 GNU numfmt(自 8.21 (2013) 起在 GNU coreutils 中)以四舍五入到最接近的数字而不是四舍五入。另请参阅--format=%.3f以获得更高的精度。