Использование расширения параметра
$ 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"
на ваш код Вы можете использовать только 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
Мы можем сделать это с помощью 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 )
сравнить предпоследнее поле и вывести требуемую строку