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

Arr*_*cal 17 command-line bash scripts disk-usage

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

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

Use%
 83%
Run Code Online (Sandbox Code Playgroud)

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

小智 20

我会用...

df --output=pcent /mount/point | tr -dc '0-9'
Run Code Online (Sandbox Code Playgroud)

不确定 sed 是否更快,但我不记得 sed 值。

  • @Arronical 除非您的输出 waaaaaaaaaaay 大于 100%,否则我怀疑您会看到很大差异。:P (4认同)
  • 在这种情况下,“tr”比“sed”更容易阅读。 (2认同)

Ser*_*nyy 7

这是 awk 解决方案:

$ df --output=pcent /mnt/HDD | awk -F'%' 'NR==2{print $1}'   
 37
Run Code Online (Sandbox Code Playgroud)

基本上这里发生的事情是我们将 '%' 字符视为字段分隔符(列分隔符),并且仅当记录数等于 2(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
Run Code Online (Sandbox Code Playgroud)

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

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


Zan*_*nna 6

sed 解决方案

df --output=pcent /mount/point | sed '1d;s/^ //;s/%//'
Run Code Online (Sandbox Code Playgroud)
  • 1d 删除第一行
  • ; 分隔命令
  • s/^ // 从行首删除一个空格
  • s/%//移除%标志


fed*_*qui 6

您可以通过管道传输grep到仅提取数字的一个:

df --output=pcent /mount/point | grep -o '[0-9]*'
Run Code Online (Sandbox Code Playgroud)

现场观看:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83
Run Code Online (Sandbox Code Playgroud)