Andrej Kastrin wrote:
> Dear all,

Hello,

> I have bar separated file:
> name1|345
> name2|201
> ...
> 
> I store it into a hash;
> while (<FILE_A>) {
>   chomp;
>   ($name,$score) = split (/\|/,$_);
>   $hash{$name} = $score;
> }
> 
> Then I have second file:
> ID - 001
> NA - name1
> NA - name2
> 
> ID - 002
> NA - name2
> NA - name4
> ...
> 
> I match all ID's and NA's:
> 
> while (<FILE_B>) {
>   chomp;
>   if (/^ID/ {
>       $ID = substr($_,5);
>   }
>    elseif (/^NA/) {
>        $NA = substr($_,5)
> }
> 
> Now I have to do somethig like;
> 001 | 345+201
> ...
> 
> So, I want to read ID and NA fields from second file and then with each
> ID print the sum of scores from first file.
> 
> Any suggestion. Which structure should I use to do that. Thank's in
> advance.

It looks like you could do something like this (UNTESTED):

my %scores;
while ( <FILE_A> ) {
  chomp;
  my ( $name, $score ) = split /\|/;
  $scores{ $name } = $score;
}

my ( $ID, %ids );
while ( <FILE_B> ) {
  if ( /^ID\s*-\s*(.+)/ ) {
    $ID = $1;
  }
  elseif ( /^NA\s*-\s*(.+)/ ) {
    $ids{ $ID } += $scores{ $1 };
  }
}

for my $id ( keys %ids ) {
  print "$id | $ids{$id}\n";
}



John
-- 
use Perl;
program
fulfillment

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


Reply via email to