相关疑难解决方法(0)

删除重复行而不进行排序

我在Python中有一个实用程序脚本:

#!/usr/bin/env python
import sys
unique_lines = []
duplicate_lines = []
for line in sys.stdin:
  if line in unique_lines:
    duplicate_lines.append(line)
  else:
    unique_lines.append(line)
    sys.stdout.write(line)
# optionally do something with duplicate_lines
Run Code Online (Sandbox Code Playgroud)

这个简单的功能(uniq无需先排序,稳定排序)必须作为简单的UNIX实用程序提供,不是吗?也许是管道中过滤器的组合?

询问的原因:在我无法从任何地方执行python的系统上需要此功能

shell scripting filter uniq

92
推荐指数
5
解决办法
5万
查看次数

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

这里提出了类似的问题,但他们没有解决为什么sortawk之间存在速度差异。

我首先在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 …

unix sorting bash awk processing-efficiency

5
推荐指数
1
解决办法
717
查看次数

标签 统计

awk ×1

bash ×1

filter ×1

processing-efficiency ×1

scripting ×1

shell ×1

sorting ×1

uniq ×1

unix ×1