Domanda

I want to sort a tabular file based on the 3rd column. I have this code so far but it doesn't seem to work.

#!/usr/local/bin/perl

use warnings;
use strict;

my (@row, @rows);
while (<DATA>) {
    chomp;
    @row = split ("\t",$_);
    push (@rows, \@row);
}

my @sorted = sort { $b->[2] <=> $a->[2] } @rows;

foreach (@sorted) {
    print join ("\t", @$_),"\n";
}

__DATA__
A   3277    6   1   0   0   0
B   2136    1   0   0   0   0
C   2653    0   0   0   0   0
D   11  3541    0   0   0   0
E   3258    1628    0   0   0   2

is always printing:

E   3258    1628    0   0   0   2
E   3258    1628    0   0   0   2
E   3258    1628    0   0   0   2
E   3258    1628    0   0   0   2
E   3258    1628    0   0   0   2

where I would like the output to be like this:

D   11  3541    0   0   0   0
E   3258    1628    0   0   0   2
A   3277    6   1   0   0   0
B   2136    1   0   0   0   0
C   2653    0   0   0   0   0

Any help about why is this happening and what can be done to output the correct form? Thanks

È stato utile?

Soluzione

The sort is working fine, the error is in reading the data. You're overwriting the contents of @row and pushing multiple references to it into @rows. Instead, create a new @row for each line of data:

my @rows;
while (<DATA>) {
    chomp;
    my @row = split "\t";
    push (@rows, \@row);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top