Hi,
I am trying to write script to retrieve info from a file that looks like:
col1 col2 col3
A 5 10
A 5 10
A 5 11
A 6 8
A 7 9
B 5 8
B 6 9
what i need is to get for each (non redundant) value from column 1, the
corresponding non redundant values from column 2 and 3. e.g:
For A (col 1), I want 5 -10, 5-11 and 6-8. For B: 5-8 and 6-9.
I wrote a script to get rid of the redundant values using hashes and
subroutines and it worked. However I still need to compare the elements from
col2 and col3 with other values. To do this I want to sort the data, but I
am struggling to sort the hash. It prints what I want but only if ask it to
print within the subroutine (line 29). I do not know how to return a hash
with the sorted values. I hope someone could help me out with this. The code
is below:
#! usr/local/bin/perl
use warnings;
use strict;
my %db_del;
my %std_dup;
open(IN,"file.csv") || die;
while (<IN>) {
my @temp=split/,/;
push (@{$db_del{$temp[0]}}, $temp[1]."\t".$temp[2]);
}
&NONRE(%db_del,%std_dup);
foreach my $e(%db_dup) {
foreach my $l (@{$db_dup{$e}}) {
print "$e,$l,$std_dup{$l}\n"; #does not print $std_dup{$l}
}}
########sub##############
sub NONRE {
my %hash;
my %seen;
my @uniq;
my %st;
%hash = @_;
foreach my $k (sort keys%hash) {
foreach my $item(@{$hash{$k}}) {
push(@uniq,$item) unless $seen{$item}++;
}
foreach my $item(@uniq) {
my @stend =split/\t/,$item;
$st{$stend[0]}= $stend[1];
}
@{$hash{$k}}= sort {$a <=> $b} keys%st;
foreach my $f(keys%hash){
foreach my $l(@{$hash{$f}}) {
print "$f,$l,$st{$l} ok\n";# it prints OK
}
}
}
@uniq =();
%seen =();
return(%hash,%st);
}