in reply to How to merge two files?

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.

Replies are listed 'Best First'.
Re^2: How to merge two files?
by toolic (Bishop) on Aug 22, 2009 at 00:32 UTC
    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