相关疑难解决方法(0)

删除大型词表中重复项的最快方法?

我需要对一个大型词表进行重复数据删除。我尝试了几个命令,并在 Linux中的Fastest `uniq` 工具如何删除大型多 GB 文本文件中的重复行做了一些研究他们解释说,对单词列表进行重复数据删除的最快方法似乎是使用awk.

awk  --> O(n) ?
sort --> O(n log n) ?
Run Code Online (Sandbox Code Playgroud)

然而,我发现这似乎不是真的。以下是我的测试结果:

time sort -u input.txt -o output.txt 
real    0m12.446s  
user    0m11.347s  
sys 0m0.906s**


time awk '!x[$0]++' input.txt > output.txt
real    0m47.221s  
user    0m45.419s  
sys 0m1.260s
Run Code Online (Sandbox Code Playgroud)

所以使用sort -u速度快了 3.7 倍。为什么是这样?有没有更快的方法来进行重复数据删除?

*********** 更新 ********

正如有人在评论中指出的那样,我的词表可能已经在某种程度上进行了排序。为了排除这种可能性,我使用random_number_wordlist_generator.py生成了两个词表。

List1 = 7 Mb  
List2 = 690 Mb

**Results AWK:**  
***List1***  
real    0m1.643s  
user    0m1.565s  
sys     0m0.062s …
Run Code Online (Sandbox Code Playgroud)

performance bash awk sort

14
推荐指数
1
解决办法
2474
查看次数

标签 统计

awk ×1

bash ×1

performance ×1

sort ×1