У меня есть команда ниже, чтобы получить информацию об использовании файловой системы на сервере:
df -k | awk '{print $5 " " $6}' | grep %
При выполнении следующие результаты:
97% /
0% /proc
0% /etc/mnttab
0% /dev/fd
46% /var
1% /var/run
1% /tmp
54% /opt/app/oracle
22% /opt/app/proviso
Мой вопрос в том, как я могу сделать строку, содержащую 97% /
исчезают?
Вы можете удалить первую строку с хвостом:
df -k | awk '{print $5 " " $6}' | grep % | tail --lines +2
+2
означает, что вы хотите распечатать все строки, начинающиеся со строки 2.
Вы можете выполнять фильтрацию и сокращение с помощью awk
:
df -k | awk '/%/ && NR > 2 {print $5 " " $6}'
/% /
выполняет ту же работу, что и grep%
.
NR> 2
отфильтровывает метку и строки /
.
Все будет в порядке, пока df
не вернет вам что-то вроде этого:
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rootvg-lv_root
367G 246G 103G 71% /
tmpfs 48G 0 48G 0% /dev/shm
Это явно нарушит ваш скрипт / команду. Поэтому я рекомендую вам всегда применять ключ -P
к команде df
в ваших сценариях .
Что касается вашего основного вопроса, я бы сделал это с помощью простого регулярного выражения
df -Ph |awk '{if($6 ~ /^\/.+/) print $5, $6}'