我想基于第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
有关为什么会发生这种情况的任何帮助以及如何输出正确的表格? 感谢
答案 0 :(得分:2)
排序工作正常,错误在于读取数据。您正在覆盖@row
的内容并将多个引用推送到@rows
。而是为每行数据创建一个新的@row
:
my @rows;
while (<DATA>) {
chomp;
my @row = split "\t";
push (@rows, \@row);
}