LINUX.ORG.RU
ФорумAdmin

Haproxy метрики и условие «ИЛИ» при использовании AWK

 , ,


0

1

У меня есть несколько AWK запросов, с помощью которых я получаю значение метрик Haproxy, например: awk -F , ‘/[pattern]/{print $5}’ /tmp/.hastats.tmp однако иногда запросы возвращают пустую строку. Как я могу улучшить запрос на такие случаи, чтобы получать однозначное целочисленное число?

И какое значение я могу использовать? Я не вижу в /tmp/.hastats.tmp ничего иного, кроме нуля и положительных целочисленных значений. Таким образом я могу использовать -1 в качестве маяка, указывающего на проблему?

Эти запросы используются в конфигурационном файле системы мониторинга, и на запросы потом в веб-интерфейсе можно повесить alert.

Перемещено hobbit из general



Последнее исправление: alekseipa5 (всего исправлений: 2)

Ответ на: комментарий от alekseipa5

Если было нужное слово, то какую-нибудь переменную сделать равной 1. А в END печатать -1 только если переменная не равна 1.

В блоках {} можно делать кучу действий через ";".

{print $5;i=1} END {if(!i)print -1}

Если знаком с языком С, то на awk писать очень просто.

vel ★★★★★
()
Ответ на: комментарий от alekseipa5

А как реализовать отсутствие выполнения инструкции END, если слово было найдено?

Элементарно, используя тернарный оператор awk:

$ awk -F: '/^root/ {print ($3 == 0) ? $7 : "empty"}' /etc/passwd
/bin/csh
$ awk -F: '/^test/ {print ($3 == 0) ? $7 : "empty"}' /etc/passwd
empty
iron ★★★★★
()
Ответ на: комментарий от alekseipa5

если ключевое слово в файле не найдено - пустая строка.

Ок, тогда вот так:

$ awk -F: 'BEGIN{f=0} {if($1~/^root/){f=1;print $7}}END{if(f==0)print "empty"}' /etc/passwd
/bin/csh
$ awk -F: 'BEGIN{f=0} {if($1~/^123/){f=1;print $7}}END{if(f==0)print "empty"}' /etc/passwd
empty
iron ★★★★★
()