perl 如何对2G的大数量文本文件内容排序?
大概2G的文本,有30百万条记录吧.
数据有6列,对其中的3列排序. 2列字符型,1列数值型. 形如:
Chr1 + 46 3 1 0
Chr1 - 1061 3 2 0
Chr1 + 1064 3 9 0
Chr2 - 1066 3 12 0
下面这个程序是可以排序的. 不过不知道有没更快的办法来排序?
#先读文件
open(FF,'a.txt');
while ( <FF>){
$l=trim($_);
push(@list ,[split(/\t/,$l)]);
}
#排序选项
sub seniority {
$a->[0] cmp $b->[0]
or $a->[1] cmp $b->[1]
or $a->[4] <=> $b->[4]
}
#排序
@ranked = sort seniority @list;
foreach $emp (@ranked) {
print "$emp->[0]\t$emp->[1]\t$emp->[4]\t$emp->[5]\t$emp->[2]\n";
}
[解决办法]
导入到数据库,想怎么排就怎么排,哈哈。
[解决办法]
在linux下用sort命令来排序是最快的
如果是在windows下,用编辑器如ultraedit来排序吧,比自己写要好
大文本的排序是比较麻烦的事情,还要调试半天,用现成的多效率
[解决办法]
不知道你的二维表主键是什么,假设是前三个字段,那么你可以构造一个哈希表,方便后续检索。
my %h;my @array;open(FF,'a.txt'); while ( <FF>){ $l=trim($_); @array=split(/\t/,$l,6); $h{$array[0]}{$array[1]}{$array[2]}=[@array[3..5]];}