1 个不稳定版本

0.1.0 2020年7月5日

#22 in #sketch

MIT 许可证

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