如何将分区的磁盘使用百分比以整数形式捕获?

如何将分区的磁盘使用百分比以整数形式捕获?

我想要一种方法来捕获特定分区的磁盘使用情况,方法是使用该分区所安装的目录。输出应该只是一个整数,没有填充或后续符号,因为我想将其保存在一个变量中。

我已经使用了df --output=pcent /mount/point,但需要修剪输出,因为它有一个不必要的标题、值之前的单个空格填充以及值后面的 % 符号,如下所示:

Use%
 83%

在这种情况下,我想要的输出将是83。我不知道使用 的输出有什么缺点df,但很乐意接受不依赖于它的其他方法。

答案1

我会用...

df --output=pcent /mount/point | tr -dc '0-9'

不确定 sed 是否更快,但我永远记不住 sed 的值。

答案2

这是 awk 解决方案:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37

基本上这里发生的情况是我们将 '%' 字符视为字段分隔符(列分隔符),并且仅当记录数等于二(部分NR==2)时才打印第一列 $1

如果我们想使用bash-only 工具,我们可以这样做:

bash-4.3$ df --output=pcent / | while IFS= read -r line; do 
>     ((c++)); 
>     [ $c -eq 2 ] && echo "${line%\%*}" ;
> done
 74

为了好玩,可以sed通过捕获组和-r扩展正则表达式进行替代:

df --output=pcent | sed -nr '/[[:digit:]]/{s/[[:space:]]+([[:digit:]]+)%/\1/;p}'

答案3

sed解决方案

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
  • 1d删除第一行
  • ;分隔命令
  • s/^ //删除行首的空格
  • s/%//移除%标志

答案4

我遇到一个尚未实现 --output=pcent 的服务器,因此我使用了正常输出,按列过滤,然后使用正则表达式:df /mount/point | awk '{print $5}' | tr -dc '0-9'

相关内容