in reply to Re^3: Combining Records From Multiple Files based on Common Key Values
in thread Combining Records From Multiple Files based on Common Key Values


tirwhan,


I'm sorry. The question I meant to ask was as
follows:


The 3 CSV files which I am using as input do not have
identical server names.


File A
Server,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,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?

  • Comment on Re^4: Combining Records From Multiple Files based on Common Key Values

Replies are listed 'Best First'.
Re^5: Combining Records From Multiple Files based on Common Key Values
by tirwhan (Abbot) on Jul 17, 2007 at 16:53 UTC

    Hmm, we love changing requirements...in that case you'd need to first build a hash which contains the server names in the key by going through all the files (caching their content if their not large enough for this to cause memory problems), and then iterate over that list of servers (see perldoc -f keys on how to do that) in the while loop, inserting the value found in the respective file or a 0, e.g.

    push (@{$result{$server}},$cpua || 0)

    All dogma is stupid.
      tirwhan, Would it be too much to ask for you to show me how I would incorporate into your original code? I'm sorry I typically do my applications in either shell scripts (with awk or sed) or SAS. This application must be done in perl, which I am a little less familiar with.

        I've told you how it can be done, esper and Limbic~Region have suggested alternative approaches. Why don't you try composing your own, working solution from that (read some of the documentation I've pointed out and maybe some more basic Perl documentation perldoc perltoc is a good place to start) and this problem should be easy to solve. If something isn't working or you don't understand what certain parts of the code do then ask specific questions about that (preferably posting what you've tried) and I'm sure you will get help. PM is a place where we try to aid each other's understanding of Perl, not have someone do the work for you. If you want that, hire a Perl programmer.


        All dogma is stupid.