Help us to help you! Next time, please post code and data we can easily test. See my code below for an example - it should work right ahead.
To print 0 instead of undef, you can use the defined-or // operator. It needs Perl 5.10, otherwise you have to be more verbose (defined $_ ? $_ : 0).
#!/usr/bin/env perl
use warnings;
use strict;
use feature qw{ say };
use List::Util qw{ first };
my $IN = *DATA{IO};
my %hits;
my @headers = split ' ', <$IN>;
my $index = first { $headers[$_] eq 'Strand' } 0 .. $#headers;
while (<$IN>) {
chomp;
my @F = split ' ';
$hits{ $F[ $index + 1 ] }{ $F[ $index + 2 ] }{ $F[$index] }++;
}
for my $key (keys %hits) {
for my $inner_key (keys %{ $hits{$key} }) {
say join "\t", $key, $inner_key,
map $_ // 0, @{ $hits{$key}{$inner_key} }{qw{ c w }};
}
}
__DATA__
Strand
c 8 336158 75 75M 74
c 12 828707 74 74M 73
w 10 528559 74 74M 0
c 15 267766 74 74M 73
c 12 828707 74 74M 73
c 14 491797 74 74M 73
Have you noticed I used $_ only in map and first? Both chomp and split work with it by default. If you feel the need to explicitly type the argument, name the variable.
($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord
}map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|