Просто с помощьюawk(для извлечения строк по шаблону):
awk '/^[0-9]{4}-[0-9]{2}-[0-9]{2}.*\.java:LOG/' inputfile > outputfile
Знак процента является оператором по модулю (, например. 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%%%}
, но это более запутанно для чтения.
Вместо запуска 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