> -----Original Message-----
> From: country [mailto:[EMAIL PROTECTED] 
> Sent: Wednesday, July 18, 2007 06:00
> To: beginners@perl.org
> Cc: [EMAIL PROTECTED]
> Subject: Combining Records From Multiple Files based on 
> Common Key Values
> 
> I have multiple CSV files (3 for this example) with
> identical record layouts except that each Server Name may not be in
> all of the files. Also the CSV files might not be sorted by Server
> Name.
> 
> File A
> Server Name,Avg CPU,P95 CPU,Avg Mem Util,P95 Mem Util
> WSOMQAVPRA05,93.75,95.87,66.67,68.13
> wsomdavpra03,90.39,94,65.77,68.51
> wsomddvfxa01,39.22,92.19,82.59,88.25
> 
> File B
> Server Name,Avg CPU,P95 CPU,Avg Mem Util,P95 Mem Util
> WSOMQAVPRA05,34.78,100,55.1,67.6
> wsomdavpra03,69.04,98.55,84.07,89.73
> wsomddvfxa01,92.44,97.54,67.72,71.69
> wsompapgtw05,48.77,96.9,92.1,93.55
> 
> File C
> Server,Avg CPU,P95 CPU,Avg Mem Util,P95 Mem Util
> WSOMQAVPRA05,93.13,98.11,68.95,73.47
> wsomdavpra03,68.85,97.56,76.35,98.23
> wsomddvfxa01,46.97,96.29,88.23,94.02
> wsompapgtw05,30.66,93.74,39.89,71.35
> 
> What I am trying to do is for each Server (in Column
> 1) I want to get the Avg CPU (in Column 2) from each
> of the 3 files. In the files above this would produce
> 
> 
> File OUT
> WSOMQAVPRA05,93.75,34.78,93.13
> wsomdavpra03,90.39,69.04,68.85
> wsomddvfxa01,39.22,92.44,46.97
> wsompapgtw05,0,48.77,30.66
> 
> 
> Notice in File OUT for Server Name (wsompapgtw05),
> since wsompapgtw05 does not appear in File A, the
> value is replaced with '0'. How can I get perl to
> place a '0' in the output file when a particular
> server name appears in at least 1 of the input files,
> but not in all of the input files?
> 
> The perl code I've written up to this point does not handle the
> missing server and Avg.CPU value.  I think that I need to add
> code to first build a hash which contains the server names in a
> key by going through all the files - 3 for this example - and then
> iterating over that list of servers in a while loop, inserting the
> value
> found in the respective file or a '0'.  You will see in my code, which
> follows I have created 1 hash.  I am not sure in perl how I might
> attempt to build this additional hash with a Server Name as key
> and then iterating over that list.  My code so far is:
> 
        no need to read thru the files multiple. Build the hash and one
way is to use an index and as you open the next file, add to the index.
Now when doing the print, you only need to check the array element and
if not defined, then zero is used.

  Wags ;)
David R Wagner
Senior Programmer Analyst
FedEx Freight
1.408.323.4225x2224 TEL
1.408.323.4449           FAX
http://fedex.com/us 
 

> #!/usr/bin/perl
> 
> use strict;
> use warnings;
> ###########################################
> #   Create File with Average CPU Numbers
> ###########################################
> my %resultacpu;
> 
> for my $file ("FileA","FileB","FileC") {
> 
>     open (my $fh,"<",$file) or die "Can't open file $file: $!";
>     <$fh>; # skip header line
> 
>     while (my $line = <$fh>) {
>         my ($server,$cpua) = (split(",",$line))[0,1];
>         push @{$resultacpu{$server}},$cpua;
>     }
> 
>     close $fh or die "Can't close file $file: $!";
> }
> 
> open (my $nfh,">","OUT") or die "Can't open result file: $!";
> 
> for my $server (sort keys %resultacpu) {
>     print $nfh $server.",".join(",",@{$resultacpu{$server}})."\n";
> }
> close $nfh or die "Can't close result file: $!";
> 
> 
> I would appreciate the assistance of any perl coders who might
> be able to help me with this problem
> 
> 
> -- 
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> http://learn.perl.org/
> 
> 
> 

**********************************************************************
This message contains information that is confidential and proprietary to FedEx 
Freight or its affiliates.  It is intended only for the recipient named and for 
the express  purpose(s) described therein.  Any other use is prohibited.
**********************************************************************


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to