Table of Contents

Быстрые заметки по AWK

Отформатировать список адресов под "junos address-book"

Есть список ip-адресов и имен серверов:

$ cat TEST-SERV-LOW
192.168.1.1;server1
192.168.1.2;server2
192.168.1.3;server3
192.168.1.4;server4

Этот список надо быстро добавить через “load set relative” в address-book какого-нибудь устройства Juniper.
Делаем части конфигурации которые описывают address и address-set.

Имена серверов, политик безопасности, интерфейсов и т.д. я предпочитаю писать большими буквами, так удобнее читать конфигурацию.
Поменяем регистр у имен серверов.

$ tr [:lower:] [:upper:] <TEST-SERV-LOW> TEST-SERV-UP
$ cat TEST-SERV-UP
192.168.1.1;SERVER1
192.168.1.2;SERVER2
192.168.1.3;SERVER3
192.168.1.4;SERVER4

С помощью awk печатаем команды set address и set address-set.

$ awk -F ';' '{ print "set address " $2 " " $1}'  TEST-SERV-UP > server-set-load | awk -F ';' '{print "set address-set SET-SERVER-IP " $2}' TEST-SERV-UP >> server-set-load

В результате будет сформированный такой файл:

$ cat server-set-load
set address SERVER1 192.168.1.1
set address SERVER2 192.168.1.2
set address SERVER3 192.168.1.3
set address SERVER4 192.168.1.4
set address-set SET-SERVER-IP SERVER1
set address-set SET-SERVER-IP SERVER2
set address-set SET-SERVER-IP SERVER3
set address-set SET-SERVER-IP SERVER4

Сумма чисел

Есть вот такой лог, файл test1:

[18/Nov/2015 21:18:03] {pktdrop} Last message repeated 4 times
[18/Nov/2015 21:18:03] {pktdrop} Last message repeated 3 times
[18/Nov/2015 21:18:03] {pktdrop} Last message repeated 13 times
[18/Nov/2015 21:18:03] {pktdrop} Last message repeated 8 times
[18/Nov/2015 21:18:03] {pktdrop} Last message repeated 3 times

Надо посчитать сколько раз повторялось сообщение.
В качестве разделителя используется пробел, числа которые надо сложить находятся в 7-й переменной.

Что бы вывести только эти числа даем команду:

[k@redpc ~]$ awk -F ' ' '{print $7}' test1
4
3
13
8
3

Суммируем эти числа:

[k@redpc ~]$ awk -F ' ' '{print $7}' test1 | awk '{ x += $0 } END {print x}'
31

Или можно сразу так:

[k@redpc ~]$  awk '{ x += $7 } END {print x}' test1
31