亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 8576 | 回復(fù): 17
打印 上一主題 下一主題

perl 如何對2G的大數(shù)量文本文件內(nèi)容排序? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-02-24 04:46 |只看該作者 |倒序?yàn)g覽
大概2G的文本,有30百萬條記錄吧.
數(shù)據(jù)有6列,對其中的3列排序. 2列字符型,1列數(shù)值型. 形如:
Chr1    +      46      3      1      0
Chr1    -      1061    3      2      0
Chr1    +      1064    3      9      0
Chr2    -      1066    3      12      0


下面這個(gè)程序是可以排序的. 不過不知道有沒更快的辦法來排序?


#先讀文件
open(FF,'a.txt');
while ( <FF>){
    $l=trim($_);
    push(@list ,[split(/\t/,$l)]);
}

#排序選項(xiàng)
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";
}

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2010-02-24 08:07 |只看該作者
試試 DBD::CSV

論壇徽章:
1
未羊
日期:2014-09-08 22:47:27
3 [報(bào)告]
發(fā)表于 2010-02-24 08:09 |只看該作者
試試導(dǎo)入到數(shù)據(jù)庫,然后你想怎么排就怎么排了。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-02-24 09:14 |只看該作者
回復(fù) 1# yisn
  1. print map {$_->[3]}
  2. sort {$a->[0] cmp $b->[0] or $a->[1] cmp $b->[1] or $a->[2]  <=> $b->[2] }
  3. map {[(split(/\t/,$_))[0,1,4], $_]} <DATA>;

  4. __DATA__
  5. Chr1        +        46        3        1        0
  6. Chr1        -        1061        3        2        0
  7. Chr1        +        1064        3        9        0
  8. Chr2        -        1066        3        12        0
復(fù)制代碼
  1. [etl@dmtest ]$ perl putest13.pl
  2. Chr1    +       46      3       1       0
  3. Chr1    +       1064    3       9       0
  4. Chr1    -       1061    3       2       0
  5. Chr2    -       1066    3       12      0
復(fù)制代碼

論壇徽章:
78
雙子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06獅子座
日期:2013-10-18 13:40:31雙子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年紀(jì)念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56處女座
日期:2013-10-24 17:15:30雙子座
日期:2013-10-25 13:49:39午馬
日期:2013-10-28 15:02:15
5 [報(bào)告]
發(fā)表于 2010-02-24 09:24 |只看該作者
回復(fù) 1# yisn


    這么大的文件如果都放在數(shù)組里面是很慢的,最好的方法還是導(dǎo)入到數(shù)據(jù)庫中,或者可以用下文本數(shù)據(jù)庫。

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2010-02-24 10:21 |只看該作者
關(guān)注中,大數(shù)據(jù)量情況下,不知道那種排序最快。高人指點(diǎn)下

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2010-02-24 10:52 |只看該作者
回復(fù) 6# ioerr


      我覺得只要排序方法是把大數(shù)據(jù)讀進(jìn)內(nèi)存的,都要受到機(jī)器性能的限制。


關(guān)注下有無更好的方法。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2010-02-24 22:32 |只看該作者
謝謝各位. 看來沒什么簡單的辦法.
因?yàn)槲覕?shù)據(jù)里第1,2列范圍比較小,值基本是固定的幾個(gè)值. 所以我現(xiàn)在只好把數(shù)據(jù)先分裝到小文件中,再對小文件排序,再合并了.

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2010-02-26 09:22 |只看該作者
用數(shù)據(jù)庫吧 速度不是一個(gè)數(shù)量級的

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2010-02-26 11:14 |只看該作者
建議不要使用perl處理這么大的文件,消耗的內(nèi)存將不止8G
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP