我正在尝试使用此脚本计算 UNIX (Solaris) 主机上的总磁盘空间,但我必须使用 awk 两次。有更好的方法吗?
> root# iostat -En | grep ^Size
Size: 146.81GB <146810536448 bytes>
Size: 0.00GB <0 bytes>
Size: 107.37GB <107374182400 bytes>
Size: 107.37GB <107374182400 bytes>
Size: 107.37GB <107374182400 bytes>
Size: 107.37GB <107374182400> bytes>
Size: 21.47GB <21474836480 bytes>
这是我正在应用的 awk 语法:
# iostat -En | grep ^Size | awk '{print $2}' | cut -d"G" -f1 | awk '{sum+=$1} END {print sum}'
> 29412.7
我们是否可以添加一个缩放器以使值具有更好的十进制表示格式?
最佳答案
awk 将选择 ^Size
行(消除 grep
)并删除 G
为您服务:
iostat -En | awk '/^Size/{sum+=$2} END {print sum}'
361.55
表达式sum+=$2
强制 awk 将第二个字段视为数字。这意味着字母字符被删除。
更准确的计算
iostat
中的第三个字段输出似乎包含实际字节。这样就无需转换千兆字节、兆字节等。要使用此字段:
iostat -En | awk -F'[ \t<>]+' '/^Size/{sum+=$3} END {printf "%sGB\n", sum/1e9}'
361.559GB
选项-F'[ \t<>]+'
告诉 awk 将空格、制表符或尖括号的任意组合视为字段分隔符。这具有删除 <
的效果。和>
从第三个字段开始,这样第三个字段就可以直接被当作一个数字。
有关 awk 变量转换的更多信息
可以使用以下命令直接测试 awk 从字符串到数字的转换:
$ echo '132G' | awk '{print $1+0}'
132
$ echo '<132G' | awk '{print $1+0}'
0
在后一种情况下,<
导致数字转换失败。这就是为什么在上面的代码中更改了字段分隔符以删除 <
来自田野。
关于shell - 使用awk计算磁盘空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32491945/