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

    @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
    Ответ написан
    Комментировать