Фильтрация содержимого из вывода df

У меня есть команда ниже, чтобы получить информацию об использовании файловой системы на сервере:

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% / исчезают?

0
11.02.2016, 15:30
3 ответа

Вы можете удалить первую строку с хвостом:

df -k | awk '{print $5 " " $6}' | grep % | tail --lines +2

+2 означает, что вы хотите распечатать все строки, начинающиеся со строки 2.

0
28.01.2020, 02:49

Вы можете выполнять фильтрацию и сокращение с помощью awk :

df -k | awk '/%/ && NR > 2 {print $5 " " $6}'

/% / выполняет ту же работу, что и grep% .

NR> 2 отфильтровывает метку и строки / .

1
28.01.2020, 02:49

Все будет в порядке, пока 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}'
0
28.01.2020, 02:49

Теги

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