Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^3: Add data to input files

by graff (Chancellor)
on Sep 18, 2011 at 22:44 UTC ( [id://926665]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Add data to input files
in thread Add data to input files

If I understand your stated goal, I think you just need to move the print statement for the lines from file2 so that it's outside the conditional -- that is, you are going to print every line from file2, but you will only be altering the contents of some of the lines.

Also, since you have a hash for the relevant values from file1, you don't need to loop over all the hash keys when reading each line from file2. You just need to test of the field-11 value from file2 exists as a hash key from file1.

Putting those two things together:

use strict; use warnings; my ( $file1, $file2 ) = ( 'file1_name_here', 'file2_name_here' ); # read hash keys and values from file1: open( F, '<', $file1 ) or die "$file1: $!\n"; my %mods; while (<F>) { chomp; my ( $key, $val ) = ( split /\t/ )[0,4]; $mods{$key} = $val; } close F; # read and rewrite file2, altering certain lines as needed open( IN, '<', $file2 ) or die "$file2: $!\n"; open( OUT, '>', "$file2.new" ) or die "$file2.new: $!\n"; while (<IN>) { chomp; my ( $loc, $chk ) = ( split /\t/ )[0,11]; # or should it be [0,10 +]? if ( $loc =~ /location/ ) { # modify some input lines as needed $_ .= "\t YRI_iHs\n"; } elsif ( exists( $mods{$chk} )) { $_ .= "\t$mods{$chk}\n"; } print OUT; # print every input line to output file } close IN; close OUT; # you could rename the output to replace the original... # rename "$file2.new", $file2; # (but you might want to check the output first)
If that's not what you meant, then you'll need to explain your goal more clearly, possibly with some sample data.

(updated to fix typo in last comment line)

Replies are listed 'Best First'.
Re^4: Add data to input files
by micky744monk (Novice) on Sep 19, 2011 at 07:34 UTC
    That was perfect. My problem was to iterate along all the keys of my hash. I should revise the function exists!!! Cheers for replies!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://926665]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (6)
As of 2024-04-24 09:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found