我需要对大型单词表进行重复数据删除。我尝试了几个命令,并在此处和此处进行了一些研究,他们解释说,最快的重复数据删除单词列表的方法似乎是使用awk。
awk-> O(n)吗?排序-> O(n log n)?
但是我发现这似乎是不正确的。这是我的测试结果:
sort -u input.txt -o output.txt
真实的0m12.446s
用户0m11.347s
sys 0m0.906s
awk '!x[$0]++' input.txt > output.txt
真实的0m47.221s
用户0m45.419s
sys 0m1.260s
因此,使用sort -u快3.7倍。为什么是这样?有没有更快的方法来进行重复数据删除?
***********更新********
正如有人在评论中指出的那样,可能是我的词表已在某种程度上被排序。为了排除这种可能性,我使用此python脚本生成了两个单词表。
列表1 = 7 Mb
列表2 = 690 Mb
结果AWK:
List1
实数0m1.643s
用户0m1.565s
sys 0m0.062s
List2
实际2m6.918s
用户2m4.499s
sys 0m1.345s
结果排序:
List1
实数0m0.724s
用户0m0.666s
sys 0m0.048s
List2
实际1m27.254s
用户1m25.013s
sys 0m1.251s