Сортировать лог-файл для незаписанных IP-адресов SRC + DST - PullRequest
0 голосов
/ 05 февраля 2019

Я хотел бы отсортировать мой файл журнала (~ 5 ГБ) для уникальных событий подключения.Только уникальный (SRC_IP + DST_IP) - но с временными метками и другой информацией.


Пример:

1    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.2" dstip="10.10.10.2"...
2    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.1" dstip="10.10.10.2"...
3    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.2" dstip="10.10.10.1"...
4    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.2" dstip="10.10.10.2"...
5    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.2" dstip="10.10.10.2"...

Выходные события должны быть:

1    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.2" dstip="10.10.10.2"...
2    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.1" dstip="10.10.10.2"...
3    Feb 5 14:59:00 initf="eth0" outift="eth1" srcip="192.168.0.2" dstip="10.10.10.1"...

потому что комбинация src + dst IP уникальна.Я пробовал это с сортировкой -uk column , но это не работает, как задумано.Также столбец src + dst IP не соответствует.Иногда он переключается, потому что, в зависимости от внешнего интерфейса, отправляется dstmac или нет.

Может быть, сценарий AWK может сработать?

РЕДАКТИРОВАТЬ

Поскольку Каракфа сделал хорошее предложение, решив это с помощью awk, я сейчас пытаюсь изменить [$ 7, $ 8] на регулярное выражение

awk '!a[regexpression for src ip, regexpression for dst ip]++' file
  • , поэтому не имеет значения, будет ли позицияизменений dst и src IP.@ Эд Мортон

1 Ответ

0 голосов
/ 05 февраля 2019

при условии отсутствия пробелов в первых 8 значениях поля, это даст вам первое появление комбинации клавиш.

$ awk '!a[$7,$8]++' file

Это не требует сортированного ввода (и не изменитсам заказ), вы можете отсортировать его по вашему желанию.Если порядок полей не фиксирован, вы можете сделать что-то вроде этого:

$ awk '{for(i=1;i<=NF;i++) if($i~/^srcip=/) s=$i; else if($i~/^dstip=/) d=$i}
       !a[s,d]++;
       {s=d=""}' file

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...