使用df命令仅显示使用的%

时间:2017-09-14 22:35:47

标签: python linux bash shell grep

我找到了一些其他解决方案,例如: df -Ph /oracle/archive | awk 'NR == 2{print $5}' | tr -d '%'

但是它们看起来有点太多了,我认为存在更优雅的东西,因为我将直接转到subprocess.check_output()中的python2.7

以下是df的示例输出:

Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        7508524 4890644   2258240  69% /

我想只获取69值。

任何人都可以帮助我吗?

非常感谢

4 个答案:

答案 0 :(得分:0)

那个不优雅的是什么?您将输出管道输出到 awk ,其中表示"提取第2行,字段5"。这会导致翻译命令,该命令会将百分号变为空白。短而直接。

在Python中执行此操作需要更多代码:

  • 抓住返回字符串的第二行
  • 拆分为字符串列表
  • 取该列表的第5个元素
  • 切断尾随'%'字符
  • 打印结果。

在全开不可读模式下,它可能看起来像

print <system_call>[1].split()[4][:-1]

...您已经知道系统调用。

哪个更容易阅读和维护?你的选择。

答案 1 :(得分:0)

使用python

更短

statvfs将提供有关分区上空闲或可用块的信息,而无需调用子进程:

>>> import os
>>> st = os.statvfs('/')
>>> (st.f_blocks - st.f_bavail) / st.f_blocks
0.692345901307951

使用df和awk

更短
$ df -Ph /oracle/archive | awk 'NR == 2{print $5+0}'
69

Awk会将$5视为字符串。通过向其添加零,我们强制awk将其转换为数字并消除%

使用df和GNU grep

更短
df -Ph /oracle/archive | grep -Po '\d+(?=%)'
69

-o告诉grep只打印匹配的字符串。 \d+(?=%)会在%后面找到数字,但在匹配中不会包含%

这需要grep的-P选项,这需要GNU grep。

答案 2 :(得分:0)

尝试

echo $(df --output=pcent /oracle/archive) | tr -d 'Use% '

--output = pcent选项仅选择使用百分比字段。但是它也会打印标题。

echo命令将输出展平为单个字符串。

tr命令删除不需要的字符作为标题,前导空格和百分号。

答案 3 :(得分:0)

df --output=pcent /oracle/archive |egrep -o "[0-9]+"

或设置一个变量:

pcent_used=$(df --output=pcent /oracle/archive |egrep -o "[0-9]+")