使用 shell 从“df -h”检索特定值

使用 shell 从“df -h”检索特定值

当我使用 df -h 时,我得到以下输出:

文件系统大小已使用可用使用率%安装于

/dev/mapper/VolGroup00-LogVol00 59G 2.2G 54G 4% /

/dev/sda1 122M 38M 78M 33% /boot

tmpfs 1.1G 0 1.1G 0%/dev/shm

10.10.0.105:/某路径

                   11T  8.4T  2.1T  81% /storage4

10.11.0.101:/某路径

                   15T  8.9T  5.9T  61% /storage1

/dev/mapper/patha 5.0T 255G 4.8T 5% /storage5_vol0

/dev/mapper/pathb 5.0T 195G 4.9T 4% /storage5_vol1

/dev/mapper/pathc 5.0T 608G 4.5T 12% /storage5_vol2

我想编写一个脚本来获取可用性特定存储上的列。

我曾经用过

df -k /storage_name | tail -1 | awk'{print $3}'

文件系统列可以有值也可以没有值..这会将我的脚本的变量从$3更改为$4。

我如何获得可用性在单个命令行上,即使前面的列没有值?

答案1

只需打开 POSIX 兼容输出(-P)即可为 df:

$ df -Pk /dev/sda1 | tail -n 1 | awk '{print $4}'

这确保了每行的格式相同(长设备名称后没有换行符)。

答案2

对 df 使用 -P 选项,以确保输出是规范化的,并且不会分成多行。

而且,无论如何 - 您也可以随时使用 $(NF-2) 来打印可用列。

答案3

处理 NF 变量(字段数)。例如:

df -k /storage_name|tail -1 |awk 'NF == 6 {打印 $3};NF == 5 {打印 $4}'

答案4

df -k /dev | tail -1 | sed s/"^[^0-9]*"// | awk '{print $3}'

添加 sed 将从行首删除所有非数字字符。如果你的文件系统名称中有数字,你可能需要稍微修改一下

相关内容