根据特定列对表格文件进行排序

时间:2014-01-21 11:47:44

标签: arrays perl sorting tabular

我想基于第3列对表格文件进行排序。到目前为止,我有这个代码,但似乎没有用。

#!/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

始终打印:

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

我希望输出如下:

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

有关为什么会发生这种情况的任何帮助以及如何输出正确的表格? 感谢

1 个答案:

答案 0 :(得分:2)

排序工作正常,错误在于读取数据。您正在覆盖@row的内容并将多个引用推送到@rows。而是为每行数据创建一个新的@row

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