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); }