1 个不稳定版本
0.1.0 | 2020年7月5日 |
---|
#22 in #sketch
15KB
299 行
sketch-duplicates
以概率方式查找重复行。
动机
假设你有一个包含压缩文本文件的目录,你想要检查重复行。通常的做法可能看起来像这样
zcat *.gz | sort | uniq -d
但是,这种方法在处理大文件时可能会变得非常慢。"sketch-duplicates" 提供了一种方法来删除大多数唯一的行,从而在输出中保留大多数重复的行。"sketch-duplicates" 是概率性的,因此不能保证删除所有唯一的行。因此,在最后仍然需要有一个 sort | uniq -d
,但由于输入中删除了大多数唯一的行,这将更快。
上述示例可以写成如下使用sketch
zcat *.gz | sketch-duplicates build > sketch
zcat *.gz | sketch-duplicates filter sketch | sort | uniq -d
可以使用 sketch-duplicates combine
将多个sketch合并。这可以用来并行化sketch的构建(这里使用GNU Parallel)
echo *.gz | parallel 'zcat {} | sketch-duplicates build' | sketch-duplicates combine > sketch
echo *.gz | parallel 'zcat {} | sketch-duplicates filter sketch' | sort | uniq -d
选项
-s
,--size
:sketch的大小。增加这个值可以提高过滤精度,但会消耗更多内存。这个值被设置为保守的默认值8MiB,根据具体用例通常可以增加。-
,--probes
:在sketch中执行的探测次数。-0
,--zero-terminated
:使用NULL字节作为行分隔符。
安装
安装 Cargo(例如使用 rustup),然后运行 cargo install sketch-duplicates
。
依赖项
~3MB
~56K SLoC