Как отфильтровать ip из лог-файла - PullRequest
0 голосов
/ 18 октября 2019

У меня есть лог-файл с нашего сервера apache, и я хочу знать каждый уникальный IP-адрес, который подключается к серверу apache к / web / Service.

Из примера мне нужен последний IP-адрес, который находится перед localhost.hosting.corp. Я думаю, что это нужно сделать с помощью grep / awk, но я не очень хорош в этом:)

Ниже приведен пример файла журнала, где я заменил реальный IP-адрес на что-то другое:

1.9.2.2 - - [18/Oct/2019:11:53:54 +0200] "POST /web/Service HTTP/1.1" 200 793 "-" "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.8810)" "1.2.2.10" localhost.hosting.corp:80
1.9.2.2 - - [18/Oct/2019:11:53:55 +0200] "POST /web2/Service HTTP/1.1" 200 791 "-" "-" "1.2.1.4" localhost.hosting.corp:80
1.9.2.2 - - [18/Oct/2019:11:54:12 +0200] "POST /web/Service HTTP/1.1" 200 793 "-" "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.8810)" "1.2.1.7" localhost.hosting.corp:80
1.9.2.2 - - [18/Oct/2019:11:54:38 +0200] "POST /web/Service HTTP/1.1" 200 791 "-" "-" "1.2.1.4" localhost.hosting.corp:80
1.9.2.2 - - [18/Oct/2019:11:54:41 +0200] "POST /web/Service HTTP/1.1" 200 672 "-" "-" "1.2.1.4" localhost.hosting.corp:80```

1 Ответ

1 голос
/ 18 октября 2019

Вы можете использовать awk для фильтрации, извлечь столбец перед последним $ (NF-1), убрать символ '"' (с gensub) и распечатать только первое вхождение (используя x [ip])

awk '
/\/web\/Service/ {
      ip=gensub("\"", "", "g", $(NF-1)) ;
      if (!x[ip] ) { print ip ; x[ip]++ }
}' log.txt 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...