首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

perl 怎么对2G的大数量文本文件内容排序

2012-02-15 
perl 如何对2G的大数量文本文件内容排序?大概2G的文本,有30百万条记录吧.数据有6列,对其中的3列排序. 2列

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来排序吧,比自己写要好
大文本的排序是比较麻烦的事情,还要调试半天,用现成的多效率
[解决办法]
不知道你的二维表主键是什么,假设是前三个字段,那么你可以构造一个哈希表,方便后续检索。

Perl code
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]];} 

热点排行