awk对多个接近100g的文件进行去重

a.txt和b.txt一个90gb 一个80gb
我的机器只有32G的内存
目前用的办法是搜来的

awk '!a[$0]++' a.txt b.txt > c.txt 

然后没几分钟内存直接撑爆
大概c.txt生成到9个G左右,awk的cpu占用率变成0% 再也不动了
请教下有没有办法解决

阅读 5.5k
2 个回答

我自己找到了..

sort -us --parallel=16 dup.txt -o uniq.txt

这样写要把所有的不重复的行读入内存,90G 和 80G 如果有大量不重复的显然是不行的。

用你熟悉的语言用 B- 树实现比较好。
如果输出顺序没有限制的话,用外排算法然后uniq比较简单。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进