use strict; use warnings; my ($keya, $keyb, %hash); while () { chomp; my @d = split(/[\/\t]/); $keya = $d[2].$d[0]; $keyb = $d[1]; if (exists($hash{$keya}{$keyb})) { push(@{$hash{$keya}{$keyb}}, \@d); } else { $hash{$keya}{$keyb} = [\@d]; } } my $year = 2003; my $month = 2; my @days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); if (($year % 4) && ($year % 100)) { $days[1] = 29; } for (1..($days[$month-1])) { print sprintf('%02d/%02d', $month, $_)."/$year\n"; for (@{$hash{"$year$month"}{$_}}) { print ' '.@$_[3].' '.@$_[4]."\n"; } print "\n"; } __DATA__ 1/2/2003 Sample1 Site1 1/2/2003 Sample2 Site2 2/3/2003 Sample2 Site2 2/3/2003 Sample2 Site1 2/3/2003 Sample3 Site1 2/13/2003 SAmple2 Site4 1/5/2003 Sample1 SITE2