2011-01-22 3 views
0

Существует файл журнала, в котором каждая строка содержит поля, разделенные пробелами. Одним из полей является IP-адрес исходного узла. Мы хотим найти список IP-адресов, у которых больше записей журнала. Скажем, найти 10 лучших IP-адресов с большинством записей журнала.ВОПРОС ИНТЕРВЬЮ: файл журнала Perl

Это вопрос интервью с Perl. Интервьюер хочет знать, как будет действовать кандидат.

P.S: Этот вопрос был задан к моему другу

+2

просто хэш с ip-адресом как ключ? –

+7

Видимо кандидат попросил приятеля спросить о переполнении стека ... – daotoad

+0

Ну, я задаю вопросы о StackOverflow только для получения идей из разных сообществ :) – SuperMan

ответ

6

Предположим, что IP-адреса отображаются в колонке N:

use strict; 
use warnings; 
use constant N => 3; 

my %counts; 
while (<>) 
{ 
    my(@fields) = split /\s+/; 
    $counts{$fields[N]}++; 
} 

Это много дает хэш/P адреса I и соответствующие отсчеты.

my %iplist; 
foreach my $address (keys %counts) 
{ 
    my $count = $counts{$address}; 
    push @{$iplist{$count}}, $address; 
} 

Это много дает хэш подсчетов, и связанной с каждым графом, списком IP-адресов, которые имели этот счет.

use constant Wanted => 10; 

my $printed = 0; 
foreach my $count (sort { $b <=> $a } keys %iplist) 
{ 
    print "$count: @{$iplist{$count}}\n"; 
    $printed += scalar(@{$iplist{$count}}); 
    last if $printed >= Wanted; 
} 

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

7

Мой ответ, г-н или г-жа Интервьюер, будет основываться на ответах на несколько вопросов. Первый набор этих вопросов. Конечно, в ответах на них могут возникать дополнительные вопросы.

  1. Вы говорите «одно из полей». Знаем ли мы, в какой области? Всегда ли это одно и то же?

  2. Будут ли журналы иметь только IPv4, только IPv6 или их смесь? Является ли сопоставление адресов между IPv4 и IPv6 проблемой при подсчете, или сопоставления могут рассматриваться как уникальные исходные узлы?

  3. Насколько велик файл журнала? Сколько памяти доступно для решения проблемы?

  4. Доступны ли модули CPAN для использования или это решение ограничено только основными модулями или некоторыми другими «утвержденными» модулями?

+0

+1 # что «одобренный список» часто присутствует и часто слишком короткий , –

0

Задать вопрос, предназначено ли оно для одноразового использования.

  • Если нет, то ответ Джонатана хорош.

  • Если да, используйте однострочный вкладыш.

Предполагая, что первое поле содержит IP-адрес:

perl -ane '$count{$F[0]}++ } END { print $_, "\n" for (sort { $b <=> $a } keys %count)[0..9]' 

Хороший вопрос, который проверяет знания кандидата структур данных, манипуляции строк массива, сортировку и использование срезов массива.

Смежные вопросы