Chris Stinemetz wrote:
I would like to use the number on the left as a key in a hash and use
the number on the right as the value pair to the key. Then print the
values for each hour that have the same key. Maybe this is a good
example for an array of hashes, but I not real sure how to begin. Any
help is greatly appreciated.

Below is the input data:

Hr 12
0001 2
0002 3
0003 1
Hr 13
0001 2
0002 3
0003 1
Hr 14
0001 2
0002 3
0003 1

Desired output below:

           12 13 14
0001    2   2  2
0002    3   3  3
0003    1   1  1


$ echo "Hr 12
0001 2
0002 3
0003 1
Hr 13
0001 2
0002 3
0003 1
Hr 14
0001 2
0002 3
0003 1" | perl -e'

my ( @hours, %data );
while ( <> ) {
    push @hours, $1 if /^hr\s*(\d+)/i;
    $data{ $1 }{ $hours[ -1 ] } = $2 if /^(\d+)\s+(\d+)/;
    }

print join( "\t", "", @hours ), "\n";
for my $row ( sort { $a <=> $b } keys %data ) {
    print $row;
    for my $col ( sort { $a <=> $b } keys %{ $data{ $row } } ) {
        print "\t$data{$row}{$col}";
        }
    print "\n";
    }
'
        12      13      14
0001    2       2       2
0002    3       3       3
0003    1       1       1




John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction.                   -- Albert Einstein

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to