我需要对一个大型词表进行重复数据删除。我尝试了几个命令,并在 Linux中的Fastest `uniq` 工具和如何删除大型多 GB 文本文件中的重复行做了一些研究?他们解释说,对单词列表进行重复数据删除的最快方法似乎是使用awk
.
Run Code Online (Sandbox Code Playgroud)awk --> O(n) ? sort --> O(n log n) ?
然而,我发现这似乎不是真的。以下是我的测试结果:
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)