这里提出了类似的问题,但他们没有解决为什么sort和awk之间存在速度差异。
我首先在Unix Stackexchange上提出了这个问题,但既然他们告诉我这对于 Stackoverflow 来说是一个很好的问题,我会将其发布在这里。
我需要对一个大的单词列表进行重复删除。我尝试了几个命令,并在这里和这里做了一些研究,他们解释说,删除重复单词列表的最快方法似乎是使用 awk,因为 awk 不会对列表进行排序。它使用哈希查找来跟踪项目并删除重复项。由于 AWK 使用哈希查找,他们认为大 O 是这样的
awk --> O(n) ?
排序 --> O(n log n) ?
然而我发现这不是真的。这是我的测试结果。我使用这个 python 脚本生成了两个随机单词列表。
列表 1 = 7 Mb
列表 2 = 690 Mb
测试命令
sort -u input.txt -o output.txt
awk '!x[$0]++' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
结果 AWK:
List1
real 0m1.643s
user 0m1.565s
sys 0m0.062s
List2
真实2m6.918s
用户2m4.499s
系统0m1.345s
结果排序:
List1
real 0m0.724s
user 0m0.666s
sys …