Тут про всякий линукс, регулярные выражения и древний язык, можете не читать даже

Работаю себе потихоньку, ковыряюсь с сервером мониторинга Zabbix и вспоминаю, что настроил как-то сбор данных со всех принтеров в организации по SNMP, а с пары принтеров не получилось забрать некоторые параметры. Есть команда snmpwalk, которая собирает всё, что устройство способно отдать, списком, а есть snmpget, которая забирает значение по конкретному идентификатору. И вот через snmpget некоторые данные недоступны, хотя точно есть, что и видно через snmpwalk. А сервер их собирает, разумеется, точечно, и именно эти не может. Плюнул я тогда, решил что потом доделаю, раз данные хоть как-то доступны, значит вытащу скриптом. И вот дошли руки.
snmpwalk -v 1 -c public 10.10.0.246 | grep 43.10.2.1.4.0.1
Грепаю нужную мне строку из всего вывода — ну это элементарно, идентификаторы уникальны, нужный я знаю, вывод сводится к одной строке:
iso.3.6.1.2.1.43.10.2.1.4.0.1 = Counter32: 1603
Нужные мне данные — последнее число в строке. Как сделать, чтобы выводилось только оно? Вспоминаю, что есть такой язык обработки текста AWK. По-быстрому читаю первый попавшийся мануал с примерами, получается такая конструкция:
snmpwalk -v 1 -c public 10.10.0.246 | grep 43.10.2.1.4.0.1 | awk ‘ {print $4} ‘
Выводит то, что надо: 1603. Класс!
Но червь сомнения гложет — зачем сначала передавать вывод в одну команду, потом в другую? Наверняка же AWK тоже может найти строку по шаблону. Иду читать ещё и в процессе нахожу руководство по AWK для Диалоговой Единой Мобильной Операционной Системы (ДЕМОС) от 1988 года, изданное производственно-внедренческим кооперативом «И Н Т Е Р Ф Е Й С». 88-й год! СССР. Мне 7 лет, о компьютерах ни слухом, ни духом. Сам язык и вовсе 1977-го года. Читал и плакал. 30-летний мануал к 40-летнему языку. И пригодился же, и всё ж работает! И понятие «регулярное выражение» там есть. Я о них узнал года три назад, когда кроссворд из регулярок решил решить, до этого как-то не было нужды. А сейчас пользуюсь и не нарадуюсь, до того удобный инструмент. А оно существует со времён, когда меня и в проекте не было. Такие дела. Команда в итоге выглядит так:
snmpwalk -v 1 -c public 10.10.0.246 | awk ‘/43.10.2.1.4.0.1/ {print $4}’
И работает заметно быстрее первой, конечно.
Мошт кому пригодится, если snmpget говорит: SNMP error: (noSuchName) There is no such variable name in this MIB.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *