抓取超过 85% 的卷名

抓取超过 85% 的卷名

我想从下面的输出中获取所有容量超过 85% 的卷名。我知道这个例子中没有,但让我们假装有。:)

Filesystem               total       used      avail capacity  Mounted on
/vol/mc3240a/            190GB       18GB      171GB      10%  /vol/mc3240a/
/vol/mc3240a/.snapshot       10GB      355MB     9884MB       3%  /vol/mc3240a/.snapshot
/vol/mc3240b_root_backup/      210GB     9019MB      201GB       4%  /vol/mc3240b_root_backup/
/vol/mc3240b_root_backup/.snapshot        0MB     1691MB        0MB     ---%  /vol/mc3240b_root_backup/.snapshot

答案1

df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
  • 这将捕获 85% 到 100% 的数据(0 表示 {1}00%)
  • 剪切将显示第一列(输出中第一个空格之后的任何内容都将被删除;设备不能有空格)

例子:

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             139G  132G  218M 100% /
varrun                2.0G  368K  2.0G   1% /var/run
varlock               2.0G     0  2.0G   0% /var/lock
udev                  2.0G   48K  2.0G   1% /dev
devshm                2.0G     0  2.0G   0% /dev/shm

$ df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
/dev/sda1

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             144G  130G  7.5G  95% /
varrun                506M  148K  506M   1% /var/run
varlock               506M  4.0K  506M   1% /var/lock
udev                  506M   72K  506M   1% /dev
devshm                506M     0  506M   0% /dev/shm
$ df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
/dev/sda1

答案2

尝试一下(将其放入脚本,使其可执行):

#!/bin/bash

DF_BIN='/bin/df'

DF_OUT=`${DF_BIN}`

tring='first line
second line
third line'

oldIFS="$IFS"   # store old IFS value
IFS='
'
IFS=${IFS:0:1} # tab formatting
lines=( $DF_OUT )

IFS=', '

COUNTER=0
for line in "${lines[@]}"
    do
        if [  $COUNTER -gt 0 ]; then    # strip first line
            fields=( $line )
            if [[ ${fields[4]} =~ (8[5-9]|[9][0-9]|100)%$ ]]; then
                echo "==> $line"
            fi
        fi
        let COUNTER=COUNTER+1 
done

IFS="$oldIFS"

exit 0

不像上面的答案那么短,但它在右行捕获了 85% 到 100%......

或:简短的一行:

df -hx tmpfs -x devtmpfs | egrep '(8[5-9]|9[0-9]|100)%'

(编辑 Wilfs 版本)就像其他人的解决方案一样,但使用 egrep 和替代方案)

答案3

与其他的类似,但在脚本中确保所有内容都被抓取:

#!/bin/bash
#For 85% to 89%, and 95& to 99%
df -hx tmpfs -x devtmpfs | egrep '[8-9][5-9]%'
#To find if anything is 90%-94%
df -hx tmpfs -x devtmpfs | egrep '9[0-4]%'
#To find if anything is 100%
df -hx tmpfs -x devtmpfs | egrep '100%'

样本输入(tmpfs过滤掉etc):

wilf@comp:~$ df -hx tmpfs -x devtmpfs
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        96G   21G   71G  23% /
/dev/sda3        58G   43G   12G  79% /home
/dev/sda5       357G  335G  4.2G  99% /run/media/wilf/Storage
/dev/sda6        27G   19G  6.8G  74% /run/media/wilf/433b971a

示例输出-带有驱动器名称和其他内容,因为我没有将其过滤掉:

wilf@comp:~$ ./testScript
/dev/sda5       357G  335G  4.2G  99% /run/media/wilf/Storage

根据@wolfgang 的说法,这应该只打印出驱动器名称,而没有/vol

df -hx tmpfs -x devtmpfs | egrep '(8[5-9]|9[0-9]|100)%' | cut -f 1 -d " " | sed -e 's/\/vol\///g'

答案4

假设你使用命令 sayxyz来获取此输出

xyz | grep "[8-9][5-9]%"

应该给你正确的输出

相关内容