문제

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

도움이 되었습니까?

해결책

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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top