+---------------------------------------+ | | Event | Date/Time 1 | | | CNN | Date/Time 2 | | | | (etc) | | +-----------+------------- | | | Event | Date/Time 1 | | unique | PHB | Date/Time 2 | | unit # | | (etc) | | +-----------+------------- | | | Event | Date/Time 1 | | | CL | Date/Time 2 | | | | (etc) | | +-----------+------------- | | | Event | Date/Time 1 | | | SWAP | Date/Time 2 | | | | (etc) | +------------+-----------+--------------+ | | Event | Date/Time 1 | | | CNN | Date/Time 2 | | | | (etc) | | +-----------+------------- | | another | Event | Date/Time 1 | | unique | PHB | Date/Time 2 | | unit # | | (etc) | | +-----------+------------- | | | Event | Date/Time 1 | | | CL | Date/Time 2 | | | | (etc) | | +-----------+------------- | | | Event | Date/Time 1 | | | SWAP | Date/Time 2 | | | | (etc) | +---------------------------------------+ #### #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use vars qw(%HoH $field $unitNum $timestmp %hash $key); # seed the hash with some data %HoH = ( 8675309121 => { SWAPS => ["11/20/2009 12:43:00"], }, 5432129876 => { CNM => [ "11/20/2009 00:00:00" ], PHB => [ "11/20/2009 00:01:00", "11/20/2009 00:02:00" ], }, ); print Dumper( %HoH ); # reads sample data while(){ # get a line of data chomp; my ($unit_num, $event_nm, $event_date) = split(/,/); %hash = ( $unit_num => { $event_nm => [ $event_date ], }, ); @HoH{keys %hash} = values %hash } print Dumper( %HoH ); __END__ 1234567890,CNN,11/20/2009 00:01:00 1234567890,PHB,11/20/2009 00:01:02 8887776543,CL,11/20/2009 11:09:00