Я хочу из выходных данных получить все имена томов, емкость которых превышает 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
df -h | egrep "(8[5-9]|9[0-9]|100)%" | cut -f 1 -d " "
Примеры:
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
Попробуйте это (поместите это в скрипт, сделайте его исполняемым):
#!/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 с альтернативами)
Как и другие, но в скрипте, чтобы убедиться, что все это захвачено:
#!/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'
Предположим, вы используете команду say xyz
, чтобы получить этот вывод, тогда
xyz | grep "[8-9][5-9]%"
должны дать вам правильный вывод