захватить имя тома более 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
3
задан 18 February 2014 в 16:36

4 ответа

df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
  • Это поймает 85% до 100% (0, делает {1} 00%)
  • В разрезе будет показан 1-й столбец (что-нибудь после 1-го пробела в выход удален; на устройстве не может быть пробела)

Примеры:

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
0
ответ дан 18 February 2014 в 16:36

Попробуйте это (поместите это в скрипт, сделайте его исполняемым):

#!/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% ...

или: SHORT в одну строку:

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

(отредактированная версия Wilfs) точно так же, как решение другого, но с использованием egrep с альтернативами)

0
ответ дан 18 February 2014 в 16:36

Как и другие, но в скрипте, чтобы убедиться, что все это захвачено:

#!/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 и т.д. отфильтрованы):

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'
0
ответ дан 18 February 2014 в 16:36

Предположим, вы используете команду say xyz, чтобы получить этот вывод, тогда

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

должны дать вам правильный вывод

0
ответ дан 18 February 2014 в 16:36

Другие вопросы по тегам:

Похожие вопросы: