Сравните 2-процентное значение, используя оператор if

Просто с помощьюawk(для извлечения строк по шаблону):

awk '/^[0-9]{4}-[0-9]{2}-[0-9]{2}.*\.java:LOG/' inputfile > outputfile
0
05.09.2020, 11:02
2 ответа

Знак процента является оператором по модулю (, например. 8 % 5— это 3), для него ожидается второй операнд. Ошибка была бы аналогичной, если бы вы использовали (( size <= 79% )), и вы получили бы ту же ошибку для правой стороны -, если бы само sizeне содержало знака процента.

Итак, давайте уберем знак процента из ввода

size=$(df -kh | awk '$6 == "/var" {print $5}')
size=${size%"%"}
if (( size < 80 )); then
    echo "/var is less than 80 % full"
fi

Здесь ${size%"%"}— это суффикс -, удаляющий расширение ${var%word}, первый %является частью синтаксиса, второй (в кавычках )— это %, который мы хотим удалить. Кавычки здесь, потому что ${var%%word}аналогичен, удаляя самый длинный совпадающий суффикс вместо самого короткого. Мы могли бы также использовать ${size%%%}, но это более запутанно для чтения.

0
18.03.2021, 23:07

Вместо запуска dfдля всех ваших дисков вы можете указать цель(df /var)

Для GNU/Linux вывод можно отформатировать. Наконец, вы можете опустить %с помощью tr, sed substitution,...

df /var --output=pcent | tail -1 |tr -d '%'
55

Просто, если вы хотите использовать awkвместо df, вывод лучше использовать с df -P, чтобы сделать его переносимым. Если пути к диску слишком длинные, возможно, вы не получите вывод в одной строке, например:

df -kh
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      3.9G  404M  3.3G  11% /
/dev/mapper/VolGroup00-LogVol05
                      3.9G  442M  3.3G  12% /home
/dev/mapper/VolGroup00-LogVol04
                      3.9G  261M  3.5G   7% /var
/dev/mapper/VolGroup00-LogVol03
                      3.9G  137M  3.6G   4% /tmp
/dev/mapper/VolGroup00-LogVol02
                      7.8G  3.6G  3.8G  49% /usr
1
18.03.2021, 23:07

Теги

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