яндексовская задача.
Jul. 13th, 2006 11:45 amИмеется файл, каждая строка которого содержит два значения, разделённых табуляцией: время в формате unix_timestamp и IP-адрес (в формате aaa.bbb.ccc.ddd). Требуется для каждого встречающегося в файле IP-адреса выделить запись, которой соответствует первое и последнее посещение.
Примечание: файл не упорядочен ни по времени, ни по IP-адресам.
PS. Ну и как делал файл:
Примечание: файл не упорядочен ни по времени, ни по IP-адресам.
open F,"sort -n file |" or die $!;
my %hash;
while (<F>) {
chomp;
my ($time,$ip) = split "\\s+";
$hash{$ip}->[exists $hash{$ip}->[0]] = $time;
}
while (my ($ip,$ref) = each %hash) {
printf "%s: %d - %d\n",$ip,@{$ref};
}
PS. Ну и как делал файл:
zsh# ee=(10.20.66.1 10.20.66.10 10.20.66.40 192.168.1.10)
zsh# for i in {1..1024}; do print "$RANDOM ${ee[$[$RANDOM%4+1]]}"; done > time.ip
zsh# perl -l script.pl time.ip
10.20.66.1: 85 - 32705
10.20.66.40: 172 - 32434
192.168.1.10: 45 - 32715
10.20.66.10: 96 - 32616
zsh#
no subject
Date: 2006-07-28 02:30 pm (UTC)sort -k1n |sort -u -k2 -- первое посещение
sort -k1rn |sort -u -k2 -- последнее посещение
no subject
Date: 2006-07-29 08:36 pm (UTC)no subject
Date: 2006-07-29 08:41 pm (UTC)