#!/usr/bin/perl use strict; use warnings; use Socket; # program uses the inet_aton and inet_ntoa functions my %month; @month{ qw/ Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/} = '01'..'12'; my %data; while () { my ($date, $ip, $count1, $count2) = split /,/; $data{$date}{ inet_aton($ip) }{count1} += $count1; $data{$date}{ inet_aton($ip) }{count2} += $count2; } for my $date (sort by_date keys %data) { for my $ip (sort keys %{ $data{$date} }) { my $c1 = $data{$date}{$ip}{count1}; my $c2 = $data{$date}{$ip}{count2}; print join(",", $date, inet_ntoa($ip), $c1, $c2), "\n"; } } sub by_date { my ($d_a, $m_a, $y_a) = split ' ', $a; my ($d_b, $m_b, $y_b) = split ' ', $b; my $A = "$y_a$month{$m_a}$d_a"; my $B = "$y_b$month{$m_b}$d_b"; $A cmp $B; } __DATA__ 01 Jul 2007,221.6.19.196,9,19 01 Jul 2007,221.6.19.197,1,3 01 Jul 2007,221.6.19.196,12,12 01 Jul 2007,221.6.19.197,2 ,2 02 Jul 2007,202.119.104.22,1,1 02 Jul 2007,221.6.19.196,20,45 03 Jul 2007,202.119.104.12,1,11 03 Jul 2007,202.119.110.236,1,2 03 Jul 2007,210.29.132.9,1,2 03 Jul 2007,210.29.141.188,1,2 03 Jul 2007,221.6.19.195,3,7 03 Jul 2007,221.6.19.196,4,7 03 Jul 2007,222.192.2.213,1,0 03 Jul 2007,202.119.108.42,3,3 03 Aug 2007,221.6.110.9,1,2 03 Aug 2007,221.6.110.9,10,10 ***prints C:\perlp>perl t7.pl 01 Jul 2007,221.6.19.196,21,31 01 Jul 2007,221.6.19.197,3,5 02 Jul 2007,202.119.104.22,1,1 02 Jul 2007,221.6.19.196,20,45 03 Jul 2007,202.119.104.12,1,11 03 Jul 2007,202.119.108.42,3,3 03 Jul 2007,202.119.110.236,1,2 03 Jul 2007,210.29.132.9,1,2 03 Jul 2007,210.29.141.188,1,2 03 Jul 2007,221.6.19.195,3,7 03 Jul 2007,221.6.19.196,4,7 03 Jul 2007,222.192.2.213,1,0 03 Aug 2007,221.6.110.9,11,12