2 个不稳定版本
0.2.0 | 2023年2月18日 |
---|---|
0.1.0 | 2019年1月2日 |
#954 in 文本处理
8KB
115 行
sortuniq
sortuniq
提供了各种 | sort | uniq
构造的优化版本,这些构造在 shell 脚本中很常见。这种构造会找到输入中的所有唯一行,无论行顺序如何。
例如
1
2
3
2
1
变为
1
2
3
用法
在没有参数的情况下,| sortuniq
生成与 | sort | uniq
相同的 集合 结果,并立即产生。这有点令人不安。它们 不是 排序的,与原始不同。
| sortuniq -c
生成与 | sort | uniq -c
相似的输出。
局部
| sortuniq --local
将从流中删除 "局部" 重复项,再次立即进行。如果你的数据非常大,并且包含许多无用的值,而你只想获取最终的 uniq
值或其他关于流的某种想法,这可能会很有用。例如,对于一些看起来像的数据
one
two
ponies!
two
one
one
horses!
two
one
ponies!
| sortuniq --local --size-hint 3
将(立即)打印
one
two
ponies!
horses!
ponies!
它已删除许多 one
和 two
条记录,但不能删除第二个 ponies!
,因为它用完了 "内存"。您可以(任意地)增加 size-hint
(默认值:64
)。
使用 uniq
实际上无法做到这一点,因为它不能查看历史记录中的超过一行。
指示性基准测试
我取了一个千兆字节的渲染维基百科页面,并提取了 "单词",产生了超过 2 亿行。
对于这个输入
| sortuniq -c
需要花费 17.5 秒(单核)和 190MB 的内存(最大 RSS)| sort | uniq -c
需要花费 111 秒(总用户时间 405 秒)和大约 4GB 的内存。
这提高了 6-23 倍的速度,并且内存提高了 21 倍。
以下是输入的一个子集(通过 wikiextractor 和 | perl -pe 's/\b/\n/g;s/[ \t]//g' | egrep -v '^$'
Helena
Carroll
Helena
Winifred
Carroll
(
13
November
1928
–
31
March
2013
)
was
a
veteran
film
,
television
and
stage
actress
.
最常用的单词,不出所料
1195445 by
1229458 with
1274390 on
1360706 as
1405234 for
1416371 '
1675168 is
1777549 The
1931603 -
2074956 was
3038885 "
3462954 a
3630791 to
4267812 in
4999315 and
5732322 of
8336207 .
9153796 ,
10748102 the
依赖项
~3MB
~41K SLoC