我想从下面的输出中获取所有容量超过 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]%"
应该给你正确的输出