среда, 16 октября 2019 г.

Простая обработка простого вывода: grep, awk, sort.

Иногда нужно понять что и как работает на множестве устройств, но заходить для этого на каждое устройства нет смысла если есть общее место хранения файлов конфигурации и последняя конфигурация сохраняется в этом месте автоматически. Для поиска нужной строки можно запустить поиск по содержимому в каталоге с файлами сохраненных конфигураций.
Т.к.  сохраняются файлы и предыдущих версий конфигурации, то  более новые помечаются добавлением номера версии "-ХХ" и если просто запустить grep <pattern>, то будет множество строк с одинаковыми названиями устройств, отличающихся только последними 2-3 знаками. Задача: найти файлы, отрезать индексы номера версий в названии, и выдать по одной уникальной строке на одно устройство. Решение примерно такое:
1) ищем подходящий паттерн (grep), подаём его на вход (awk), где указываем разделитель полей ((-F ":"), если нет то "пробел"), указываем в awk  чтобы вывел первую (или другую) Часть (относительно разделителя), но изменённую  substr, аргументом которой будет:
часть строки ($1),  далее номер  символа  для начала вывода в этой Части, и номер последнего символа в Части, длину которой определяем динамически оператором  length($1) и от которой отрезаем номер версии файла конфигурации 4  символа (надо подбирать, т.к. это д.б. с учетом сдвинутого ранее на 2 вывода Части). После этого подадим на вход команде sort -u для исключения одинаковых названий (без номера версий названия всех файлов конфигурации для одного узла будут одинаковы, и будет много одинаковых строк).

grep  "^interface Vlan5" ./* | awk -F ":" '{print substr($1,3,length($1)-4)}' | sort -u > vl5

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

после grep:
./zld-lnn32-do-0:interface Vlan5
./zld-lnn32-do-1:interface Vlan5
./zld-lnn32-do-2:interface Vlan5

после  awk:
zld-lnn32-do
zld-lnn32-do
zld-lnn32-do

после sort:
zld-lnn32-do


Комментариев нет:

Отправить комментарий