Я, конечно, понимаю, что это толстый троллинг, на который я случайно наткнулся спустя месяц, но негоже вопросу быть без ответа. Да, есть люди, которые изучают 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