Here's a solution that combines/modifies both BrowserUk's and bobdabuilda's suggestions:
#!/usr/bin/perl use warnings; use strict; use 5.010; { # Within this block because of the next line local $/ = undef; for(<DATA> =~ /(Data_Set.*?Count= 0)/gs) { my $counter = 0; my $total_aligned_reads = 0; my $mtDNA; for(split /\n/) { ## my $line = $_; #### Unnecessary; see next comment next if /(Data_Set_\d+: |^NoCoordinateCount|^$)/; ## next if /^NoCoordinateCount/; ## next if /^$/; my($chr, $lenLabel, $lengNumbers, $AlignedLabel, $alignedN +umbers) = split /\s/; ####, $line; split operates on $_ by default $total_aligned_reads += $alignedNumbers; $mtDNA = $alignedNumbers if $chr eq "chrM"; } say "total aligned reads = $total_aligned_reads"; say "mtDNA = $mtDNA"; say "mtDNA percentage = ", $mtDNA/$total_aligned_reads*100; } } __DATA__
Hope this helps!
In reply to Re: How to loop over multiple datasets (blocks of text)?
by Kenosis
in thread How to loop over multiple datasets (blocks of text)?
by rnaeye
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |