in reply to Arithmatic operation in PERL
Note that my solution produces different output than your example. You only count one occurrence of "22" on the last line but there are two. Is this by design? If so, you'd need to add a check to remove duplicate numbers (see How can I extract just the unique elements of an array? in perlfaq4).#!/usr/bin/perl use strict; use warnings; #print header line for output table print "Movie\t\tShow\t\tCollection>20\n"; LINE: while(<DATA>) { chomp; #find the record header next LINE if not /Movie="(\w+)"\s+show=(\d+)/; my ($movie,$show) = ($1,$2); my @numbers = (); while (($_ = <DATA>) =~ /\d+\s+\d+/) { chomp; push @numbers, (split " "); } #filter out just the numbers >= 20 @numbers = grep {$_ >= 20} @numbers; #add up the numbers my $total = 0; $total += $_ foreach @numbers; print "$movie\t\t$show\t\t$total\n"; } __DATA__ * Movie="ABC" show=4 10 20 30 14 90 30 21 13 11 10 09 23 22 05 22 15 19 20 * Movie="XYZ" show=4 10 20 30 14 90 30 21 13 11 10 09 23 22 05 22 15 19 10
|
|---|