用perl的sort和map对文本文件内容排序?
文本文件有6列,对其中的1,2,4,5排序,列用\t分隔
试过了这个是可行的:
open(FF,"<a.txt");
@by2and3 = map{$_->[0]}
sort{$a->[0] cmp $b->[0] || $a->[1] cmp $b->[1] || $a->[4] <=> $b->[4] || $a->[5] <=> $b->[5]}
map{[$_,(split(/\t/))[0],(split(/\t/))[1],(split(/\t/))[4],(split(/\t/))[5]]} <FF>;
close(FF);
open (OF,">b.sort");
for(@by2and3){
print OF $_;
}
close(OF);
但不是太理解,我想写成这种的比较清楚:
#先读文件
open(FF,'a.txt');
while (<FF>){
$l=trim($_);
@list = (@list,(split(/\t/,$l)));
}
#排序选项
sub seniority {
$a->[0] cmp $b->[0]
or $a->[1] cmp $b->[1]
or $a->[4] <=> $b->[4]
or $a->[5] <=> $b->[5]
}
#排序
@ranked = sort seniority @list;
foreach $emp (@ranked) {
print "$emp->[0]\t$emp->[1]\t$emp->[4]\t$emp->[5]\t$emp->[2]\n";
}
但输出来的是空白的.
我想应该是从@ranked = sort seniority @list; 这步的list不太对. 不知道怎么修改能出正确的结果?
谢谢.
[解决办法]
@list = (@list,(split(/\t/,$l)));
这句有问题,split出来的就一个数组,这样就等于把所有行切分后串成一行了
另外对1,2,4,5列排序,对应的下标是0,1,3,4不是0,1,4,5
[解决办法]
while ( <FF>){ $l=trim($_); #在一个数组中保存另一个数组的引用,构造二维数组 $list[@list] = [split(/\t/,$l))]; # or push(@list,[split(/\t/,$l)]);}