kayj has asked for the wisdom of the Perl Monks concerning the following question:

I have two files that I want to combine into one file. Here is the problem that I am having

The first file looks like
Name measure Age Eric Test1 40 16 Test2 35 16.5 Test3 60 27 Tets4 20 30 Dan Test1 15 50 Test2 22 70
The second file looks as follows
Name Area Eric Texas Dan NY
And I would like the final output file to look like this
Name measure Age Area Eric Test1 40 16 Texas Test2 35 16.5 Test3 60 27 Tets4 20 30 Dan Test1 15 50 NY Test2 22 70

The problem is that the records in file 1 do not all have the same length. What is the best way to get this done?

Your help is greatly appreciated

Replies are listed 'Best First'.
Re: How to merge two files?
by toolic (Bishop) on Aug 21, 2009 at 19:34 UTC
    Here is a general approach.

    Read the 2nd file, and store the data into a hash, where the names are the keys and the areas are the values.

    Loop through the 1st file, and whenever you detect a name (possibly by splitting the line on whitespace and counting the number of tokens), extract the area from the hash and append it to the line. Then print out the line.

      Since I had a little time to kill...

      Assuming your 1st file is named 'f1.txt' and your 2nd is 'f2.txt':

      use warnings; use strict; my %areas; my $file; my $fh; $file = 'f2.txt'; open $fh, '<', $file or die "Can not open file $file: $!"; while (<$fh>) { next if $. == 1; my ($name, $area) = split; $areas{$name} = $area; } close $fh; my $name_line = 0; my $name; my $area; $file = 'f1.txt'; open $fh, '<', $file or die "Can not open file $file: $!"; while (<$fh>) { chomp; if ($. == 1) { print "$_ Area\n"; next; } my @tokens = split; if (scalar @tokens == 1) { print "$_\n"; $name = $tokens[0]; $area = $areas{$name}; $name_line = 1; } else { if ($name_line) { $name_line = 0; print "$_ $area\n"; } else { print "$_\n"; } } } close $fh; __END__ Name measure Age Area Eric Test1 40 16 Texas Test2 35 16.5 Test3 60 27 Tets4 20 30 Dan Test1 15 50 NY Test2 22 70