поиск слова в файле и проверка значений для последних 3 вхождений

Использование расширения параметра

$ touch 2014-11-19.8.ext 2014-11-26.1.ext
$ for f in *.ext; do d="${f:0:4}${f:5:2}${f:8:2}"; echo "$d"; done
20141119
20141126
  • ${f:0:4}означает 4 символа, начиная с индекса 0, а f— имя переменной
  • замените echo "$d"на ваш код

0
17.07.2019, 14:17
2 ответа

Вы можете использовать только awk:

awk '
/ten/ && /percent/ {
        match($0,"percent=\"([^\"]*)",m)
        if (m[1] < 10) print "CRITICAL"
        else if (m[1] < 20) print "WARNING"
        else print "OK"
}' file  | tail -n3

Но для XML-данных лучше использовать парсер xml:

last_percents=$(
    xmlstarlet select -t  -m '//mem[@type="tenure"]' -v '@percent' -n < file \
    | tail -n3
)

for i in $last_percents; do
    if [ $i -lt 10 ]; then echo "CRITICAL"
    elif [ $i -lt 20 ]; then echo "WARNING"
    else echo "OK"
    fi
done
0
28.01.2020, 03:27

Мы можем сделать это с помощью awk.

awk -F '"' '/percent/ && /ten/ {if( $(NF-1) > 20 ) {print "OK" } else if ( $(NF-1) < 20 ) {print "WARNING" } else if ( $(NF-1) < 10 ) { print "CRITICAL" }}' /var/lib/activemq/data/gc.log
  • -F '"'двойные кавычки в качестве разделителя полей
  • /percent/ && /ten/строки grep с шаблонами.
  • ( $(NF-1) > 20 )сравнить предпоследнее поле и вывести требуемую строку
0
28.01.2020, 03:27

Теги

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