Hi all,

Thanks for those who replied to my posting.... appreciate all the help
given. :)

Based on the code written by John (thanks a lot), I would like to ask a
further question :

John's code ==>
                            #!/usr/bin/perl -w
                            use strict;

                            my %data;
                            for my $file ( '/data/table1', '/data/table2' )
{
                                    open IN, "< $file" or die "Cannot open
$file: $!";
                                    while ( <IN> ) {
                                            my ( $time, $in, $out ) = split;
                                            $data{ $time }[0] += $in;
                                            $data{ $time }[1] += $out;
                                    }
                                    close IN;
                            }

                            for ( sort keys %data ) {
                                    print "$_ @{$data{$_}}\n";
                            }

The sample 2 tables (fields being TIME, IN, OUT respectively) ==>

                    Table #1
                    ------------
                    1006788900 198 36
                    1006788600 29 35
                    1006788300 18 75
                    1006788000 19 65
                    1006787700 42 37
                    1006787400 29 26
                    1006787100 65 84
                    1006786800 6 87

                    Table #2
                    ------------
                    1006789500 43 47
                    1006789200 23 64
                    1006788900 198 36
                    1006788600 29 35
                    1006788300 18 75
                    1006788000 19 65
                    1006787700 42 37
                    1006787400 29 26


Is there a way to modify the above code to summarise ONLY common values
based on TIME field?? For example, the 1st record (TIME field) in Table #2
does not appear anywhere in Table #1, so the output shouldn't contain this
record. In other words, the output from the code should only display records
whereby TIME (as a key) appears in BOTH tables, not just one.

I hope I am clear enough in my elaboration.

Thanks guys. :)



----- Original Message -----
From: "John W. Krahn" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, December 14, 2001 5:49 PM
Subject: Re: Summarising tables


> Perl wrote:
> >
> > Need a little help on summarising 2 different tables into 1, based on a
particular field.
> >
> > The 2 tables (they are actually content from a log file) look like the
follow :
> >
> > Table #1
> > ------------
> > 1006788900 198 36
> > 1006788600 29 35
> > 1006788300 18 75
> > 1006788000 19 65
> > 1006787700 42 37
> > 1006787400 29 26
> > 1006787100 65 84
> > 1006786800 6 87
> >
> > Table #2
> > ------------
> > 1006789500 43 47
> > 1006789200 23 64
> > 1006788900 198 36
> > 1006788600 29 35
> > 1006788300 18 75
> > 1006788000 19 65
> > 1006787700 42 37
> > 1006787400 29 26
> >
> > They may not be of equal length. The first field is TIME, 2nd
> > is INPUT and 3rd is OUTPUT. Basically, what I want to do is to
> > summarise the table based on the first field (TIME). For example,
> > if both tables have TIME as 1006788600, INPUT and OUTPUT from
> > both tables whose TIME is 1006788600 will be summed up. Meaning
> > the script needs to go thru the tables to look for entries with
> > the same TIME, and add the INPUT and OUTPUT together to form
> > another summaried table.
> >
> > Any easy way for me to do that other than putting the data into
> > an array or hash table, and compare them entry by entry??
>
> The easiest way would be to use a hash:
>
> #!/usr/bin/perl -w
> use strict;
>
> my %data;
> for my $file ( '/data/table1', '/data/table2' ) {
>     open IN, "< $file" or die "Cannot open $file: $!";
>     while ( <IN> ) {
>         my ( $time, $in, $out ) = split;
>         $data{ $time }[0] += $in;
>         $data{ $time }[1] += $out;
>         }
>     close IN;
>     }
>
> for ( sort keys %data ) {
>     print "$_ @{$data{$_}}\n";
>     }
>
>
>
>
> John
> --
> use Perl;
> program
> fulfillment
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to