country wrote:
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?

This appears to do what you want:

@ARGV = glob 'File[ABC]';

my %resultacpu;
my $column = 0;

while ( <> ) {
    next if $. == 1;    # skip header line
    my ( $server, $cpua ) = split /,/;
    $resultacpu{ $server }[ $column ] = $cpua;
    if ( eof ) {
        $column++;
        close ARGV;
        }
    }

open my $nfh, '>', 'OUT' or die "Can't open 'OUT' $!";

for my $server ( sort keys %resultacpu ) {
print $nfh join( ',', map $_ || 0, $server, @{ $resultacpu{ $server } } ), "\n";
    }

close $nfh or die "Can't close 'OUT' $!";




John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall

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


Reply via email to