#!/usr/bin/perl -w use strict; my %result; for my $row() { my($num,$date,$time)=split /\s+/,$row; push @{ $result{$num}->{$date} }, $time; } for my $num(sort keys %result) { for my $date(sort keys %{$result{$num}}) { my %contains; my @time_ary; for my $time(sort @{$result{$num}->{$date}} ){ push @time_ary, $time unless $contains{$time}++; } printf "%s\t%s\t%s\n", $num,$date,join(',',@time_ary); } } __DATA__ 848 05/23/06 11:00 848 05/23/06 12:30 848 05/23/06 13:00 848 05/23/06 14:00 848 05/25/06 11:00 848 05/25/06 12:00 261 05/24/06 11:00 261 05/24/06 12:30 261 05/24/06 13:00 261 05/24/06 13:00 261 05/24/06 13:00 261 05/24/06 13:00