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


16

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

我已经用过了df --output=pcent /mount/point,但是需要修剪输出,因为它有一个不必要的标题,在值前加上空格,并在值后加上%符号,如下所示:

Use%
 83%

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


1
为什么不简单地解析呢?
雅各布·弗利姆

1
我也没有看到任何缺点,您可以使用df删除标头,然后| TR -dc '0-9'

我的立场是正确的,我找不到从df中删除标题的开关。

我已经阅读了手册页和信息页,也找不到@ bc2946088,请考虑一下tr,我的想法和sed和awk想法一团糟。
Arronical

3
我也搜索过删除标题选项。基本上,GNU开发人员不愿实现它。有功能要求,他们只是拒绝。
Sergiy Kolodyazhnyy

Answers:


19

我会用...

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

不知道sed是否更快,但我永远不记得sed的值。


1
使用time来测试它出来作为一样快的sed。
Arronical

4
@Arronical,除非您的输出waaaaaaaaaaaay大于100%,否则我怀疑您会看到很大的不同。:P
大师

@Arronical大师说了什么;调用时间很可能占主导。
CVn

1
在这种情况下,tr比容易阅读sed
帕迪·兰道

7

这是awk的解决方案:

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

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

如果我们想使用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}'

6

sed

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

6

您可以通过管道将其grep提取出来:

df --output=pcent /mount/point | grep -o '[0-9]*'

现场观看:

$ echo "Use%
> 83%" | grep -o '[0-9]*'
83

1

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


1
您应该在df中添加-P或--portability;否则,如果/ mount / point太长,它将换行,您将获得错误的值。
SvennD

1

Bash两步解决方案

去年,我有点像bash(Borne Again SHell)的粉丝,我想我会提出一个使用它的解决方案。

$ DF_PCT=$(df --output=pcent /mnt/d)
$ echo ${DF_PCT//[!0-9]/}
5
  • 第1行将df输出捕获到variable DF_PCT
  • 第2行剥离了所有不是数字的内容,DF_PCT并将其显示在屏幕上。
  • 相对于可接受答案的优势是5在生成百分比(在这种情况下)之后换行。

1

这是另一个解决方案:

df | grep /mount/point | awk '{ print $5 }' | cut -d'%' -f1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.