#!/usr/bin/env perl -l use strict; use warnings; my %count; while () { my ($seq, $chr, $loc) = split; #push @{$count{$chr}{$loc}}, $seq; ++$count{$chr}{$loc}; } print 'Reads by specific chromosome and location:'; my @wanted = ([qw{chr1 100}], [qw{chr1 500}], [qw{chr2 200}], [qw{chr3 100}]); for (@wanted) { print "Reads on CHR:$_->[0] LOC:$_->[1] = ", get_loc_reads(@$_); } print 'Reads with positive counts by chromosome and location:'; get_read_counts(); sub get_loc_reads { my ($chr, $loc) = @_; #return exists $count{$chr}{$loc} ? scalar @{$count{$chr}{$loc}} : 0; return exists $count{$chr}{$loc} ? $count{$chr}{$loc} : 0; } sub get_read_counts { for my $chr (sort keys %count) { for my $loc (sort keys %{$count{$chr}}) { #print "Reads on CHR:$chr LOC:$loc = ", scalar @{$count{$chr}{$loc}}; print "Reads on CHR:$chr LOC:$loc = ", $count{$chr}{$loc}; } } } __DATA__ A chr1 100 B chr1 100 C chr1 100 D chr1 200 E chr1 300 F chr1 300 G chr1 300 H chr2 100 I chr2 200 J chr2 200 #### Reads by specific chromosome and location: Reads on CHR:chr1 LOC:100 = 3 Reads on CHR:chr1 LOC:500 = 0 Reads on CHR:chr2 LOC:200 = 2 Reads on CHR:chr3 LOC:100 = 0 Reads with positive counts by chromosome and location: Reads on CHR:chr1 LOC:100 = 3 Reads on CHR:chr1 LOC:200 = 1 Reads on CHR:chr1 LOC:300 = 3 Reads on CHR:chr2 LOC:100 = 1 Reads on CHR:chr2 LOC:200 = 2 #### push @{$count{$chr}{$loc}}, $seq; #++$count{$chr}{$loc}; ... return exists $count{$chr}{$loc} ? scalar @{$count{$chr}{$loc}} : 0; #return exists $count{$chr}{$loc} ? $count{$chr}{$loc} : 0; ... print "Reads on CHR:$chr LOC:$loc = ", scalar @{$count{$chr}{$loc}}; #print "Reads on CHR:$chr LOC:$loc = ", $count{$chr}{$loc};