use strict; use warnings; my %data; #### map {chomp $_->[2]; $data{$_->[0]}{$_->[1]}{$_->[2]} = ''} [split /\s+/] for ; #### $data{$_->[0]}{$_->[1]}{$_->[2]} = '' for map [split], ; for my $num (reverse sort keys %data) { print "$num\t$_\t", (join ",", keys %{$data{$num}{$_}}), "\n" for keys %{$data{$num}}; } __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 #### 848 05/23/06 12:30,11:00,14:00,13:00 848 05/25/06 11:00,12:00 261 05/24/06 12:30,11:00,13:00