@IndiNoob

Как получить IP из логов на PERL 6 (Raku)?

Как вытащить список IP из лога и сгруппировать по количеству?
пример лога:
185.49.11.195 - - [21/Sep/2015:08:57:09 +0200] "GET http://testp1.moelno.lubin.pl/testproxy.php HTTP/1.1
499 0 "-" "Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/31.0"
54.224.44.192 - - [21/Sep/2015:11:01:51 +0200] "GET / HTTP/1.1" 499 0 "-" "Cloud mapping experiment searching for shoutcast servers. Contact exampl1@psd.net"
54.214.23.199 - - [21/Sep/2015:11:01:51 +0200] "HEAD / HTTP/1.1" 499 0 "-" "Cloud mapping experiment. Contact exampl1@psd.net"
143.56.71.195 - - [21/Sep/2015:13:07:45 +0200] "HEAD /robots.txt HTTP/1.0" 499 0 "-" "-"
143.56.71.195 - - [21/Sep/2015:13:55:35 +0200] "GET / HTTP/1.1" 499 0 "-" "Python-urllib/2.7"
143.56.71.195 - - [21/Sep/2015:13:55:46 +0200] "GET /script HTTP/1.1" 499 0 "-" "Python-urllib/2.7"
143.56.71.195 - - [21/Sep/2015:13:55:56 +0200] "GET /jmx-console HTTP/1.1" 499 0 "-" "Python-urllib/2.7"
143.56.71.195 - - [21/Sep/2015:13:56:06 +0200] "GET /msd HTTP/1.1" 499 0 "-" "Python-urllib/2.7"
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
@humanitatium
Я, конечно, понимаю, что это толстый троллинг, на который я случайно наткнулся спустя месяц, но негоже вопросу быть без ответа. Да, есть люди, которые изучают perl6. Да, на perl6 такие вещи все еще делать супер-просто. Можно даже распарсить этот лог в один проход красивой грамматикой, но это избыточое решение, т.к. тебе нужны только IP.
#!/usr/bin/env perl6
#определим октет как \d{1,3}
my $o = /<digit> ** 1..3/; 
#определим IP как 4 октета, разделенных точкой
my $ipdef = /$o '.' $o '.' $o '.' $o/;

#объявим хэщ
my %ip_list;
#заполним его IP-шниками
%ip_list{$_ ~~ $ipdef}++ if /$ipdef/ for 'log.txt'.IO.lines;
#выведем на экран, сортировав по убыванию частоты айпи в логе, флудеры сверху
.say for %ip_list.sort: { $^b.value cmp $^a.value };

#а вот так по возрастанию
#  .say for %ip_list.sort: *.value;

Без объяснений это 5 строк.

Результат:
143.56.71.195 => 5
54.214.23.199 => 1
54.224.44.192 => 1
185.49.11.195 => 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы