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

Chinaunix

標(biāo)題: 求教: 大文本 中 按列去重 [打印本頁]

作者: liukaiyi    時(shí)間: 2009-07-14 14:10
標(biāo)題: 求教: 大文本 中 按列去重
問題描述:
   一個比較大的文本A,按照列去重重復(fù)行

A 內(nèi)容為 :
  name1 pass1
  name2 pass2
  name1 pass3
  name4 pass4
  ......


通過一個shell 腳本,能得到
  name1 pass1
  name2 pass2
  name3 pass4




我這一般都是有 py 或 perl 的 map 來解決。
邏輯是 -- 偽代碼
for line readline( file )
     key,value=line.split('\t')[0],line
     if  not  map has_key key:
         push key , value
     else :
         continue

最后    foreach key,value map : print value

但遇到的問題是 當(dāng)文本夠大 ,這 map 會很占內(nèi)存.  而是要 bsddb 這種內(nèi)存數(shù)據(jù)庫,當(dāng) 內(nèi)存太多 就寫入 文本什么的。有感覺速度不敢恭維(這 io 大文件讀寫入庫太郁悶了)


這一直以來都沒什么好辦法解決,求大蝦 給個方

[ 本帖最后由 liukaiyi 于 2009-7-14 14:16 編輯 ]
作者: liukaiyi    時(shí)間: 2009-07-14 14:17
標(biāo)題: 回復(fù) #1 liukaiyi 的帖子
自己頂 , 大家 幫個忙 啊~
作者: kwokcn    時(shí)間: 2009-07-14 14:18
是說name重復(fù)的就只展示第一個?

  1. awk '!a[$1]++' URFILE
復(fù)制代碼

作者: blackold    時(shí)間: 2009-07-14 14:19
標(biāo)題: 回復(fù) #1 liukaiyi 的帖子
  1. awk '!a[$1]++' urfile
復(fù)制代碼


文件有多大?要求要多快?
作者: liukaiyi    時(shí)間: 2009-07-14 14:20
標(biāo)題: 回復(fù) #3 kwokcn 的帖子
恩 目前是這樣的
當(dāng)然可以 選擇 更好
比如 : 使用最后一個 什么的


awk '!a[$1]++' URFILE 能說明下嗎?
作者: kwokcn    時(shí)間: 2009-07-14 14:24
標(biāo)題: 回復(fù) #5 liukaiyi 的帖子
使用最后一個就必須得往內(nèi)存里丟更多東西了。
name第一次出現(xiàn)的時(shí)候a[$1]為空,!a[$1]就為真,執(zhí)行默認(rèn)的print,a[$1]自加為1,第二次直到第N次出現(xiàn),!a[$1]均為假,無操作。
CU常見用法,可默念幾遍加深記憶。
作者: blackold    時(shí)間: 2009-07-14 14:24
直接排序呢?沒有測試過。
  1. sort -uk 1,1 urfile
復(fù)制代碼


LZ可以測試一下,我沒有大文件。
作者: liukaiyi    時(shí)間: 2009-07-14 14:25
原帖由 blackold 于 2009-7-14 14:19 發(fā)表
awk '!a[$1]++' urfile

文件有多大?要求要多快?


上 10G 的樣子 , 全是日志  。
速度嘛   大概給的時(shí)間 是 小1 小時(shí)
作者: blackold    時(shí)間: 2009-07-14 14:25
標(biāo)題: 回復(fù) #8 liukaiyi 的帖子
應(yīng)該沒有問題。
作者: liukaiyi    時(shí)間: 2009-07-14 14:27
標(biāo)題: 回復(fù) #8 liukaiyi 的帖子
謝謝大家 這方法我會 都嘗試下  ,運(yùn)行后 時(shí)間對比
可能 過幾天 給大家 了參考了

[ 本帖最后由 liukaiyi 于 2009-7-14 14:30 編輯 ]
作者: blackold    時(shí)間: 2009-07-14 14:29
標(biāo)題: 回復(fù) #10 liukaiyi 的帖子
還要跑幾天?完了。
作者: 可惡的    時(shí)間: 2009-07-14 14:38
標(biāo)題: 回復(fù) #11 blackold 的帖子
幫你接話:我心神不寧了……
PS:樓主的這個問題已經(jīng)成經(jīng)了……
作者: liukaiyi    時(shí)間: 2009-07-17 16:20
標(biāo)題: 回復(fù) #11 blackold 的帖子
實(shí)在對不起了,讓大家。。。



結(jié)果 沒發(fā)說 ,很糟糕
我沒等到 運(yùn)行結(jié)束
機(jī)器 為2u2g 配置 的
文本 1千萬條的 數(shù)量
反正一小時(shí)沒解決



對于速度方面  公司 打算 使用 hadoop 來處理 文本,所謂的云計(jì)算 。。。
http://hadoop.apache.org/core/


找 hadoop 資料中

[ 本帖最后由 liukaiyi 于 2009-7-17 16:23 編輯 ]
作者: blackold    時(shí)間: 2009-07-17 16:29
標(biāo)題: 回復(fù) #13 liukaiyi 的帖子
沒那么夸張吧,10G就要云計(jì)算了。

可能考慮將文件分割也小文件,排序去重,再合并去重。
作者: 7717060    時(shí)間: 2009-07-17 17:11
可以先把文件分成幾10份排重,然后在一點(diǎn)點(diǎn)合并排重
作者: kwokcn    時(shí)間: 2009-07-17 17:12
1個小時(shí)沒完?多少數(shù)據(jù)?

  1. [root]# time awk -F, '!a[$1]++' * > /dev/null

  2. real    2m10.550s
  3. user    0m49.349s
  4. sys     0m12.456s

  5. [root]# du -sh
  6. 5.9G    .

  7. [root]# cat * | wc -l
  8. 11791460
復(fù)制代碼

作者: windaoo    時(shí)間: 2009-07-17 22:08
我想問一下樓主,你的數(shù)據(jù)就是"name pass"這種固定的格式嗎?
兩個字段分別有長度上限么

我覺得如果經(jīng)常要算,可以考慮用 C 寫一個程序來做這件事,也許可以得到非常小的內(nèi)存占用和很快的速度
作者: mapleaigh    時(shí)間: 2009-07-18 20:01
只需要按列去重?要不要排序一下?

sort應(yīng)該可以做到,不過速度我就不知道了……

[ 本帖最后由 mapleaigh 于 2009-7-18 21:56 編輯 ]
作者: 皇家救星    時(shí)間: 2009-07-19 23:14
機(jī)器好一點(diǎn)(100G內(nèi)存) 1kw條數(shù)據(jù)應(yīng)該是幾分鐘的事情 




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2