#random #sampling #line #numbers #probabilistic #file #shuf

app randlines

与 shuf(1) 类似,但在内存使用上更加概率化和最小化

4 个版本

0.1.3 2020年11月19日
0.1.2 2020年11月19日
0.1.1 2020年11月18日
0.1.0 2020年11月18日

#36 in #probabilistic

MIT 许可证

6KB
69

randlines

crates.io

从按行排列的文件中输出随机数量的行。在 shuf 被终止的地方继续。

安装

$ cargo install randlines

用法

$ randlines -h
randlines 0.1.1

Emit a random subset of lines from a file. This is a probabilistic program, you
will not get exactly `n` lines.

Typically, you can use shuf(1) which uses reservoir sampling and is very
efficient. However, if we want to extract 10M random lines from a file of 100M
lines, shuf(1) might be killed. However, randlines will not shuffle lines, just
skip over random number of lines.

USAGE:
    randlines [OPTIONS] [input]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -n <n>                          [default: 16]
    -s, --size-hint <size-hint>

ARGS:
    <input>

从文件中输出一个随机子集的行。这是一个概率程序,您不会得到正好 n 行。

通常,您可以使用 shuf(1),它使用水库抽样并且非常高效。但是,如果我们想从包含 1 亿行文件的 10M 行中提取随机行,shuf(1) 可能会被终止。然而,randlines 不会打乱行,只是跳过随机数量的行。

待办事项

  • 从 stdin 读取时压缩临时输出

依赖项

~5–14MB
~171K SLoC