1 заметка с тегом

awk

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

Работаю себе потихоньку, ковыряюсь с сервером мониторинга 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.

 Нет комментариев    147   2017   awk   snmp   zabbix