5 个版本

0.3.3 2022年7月14日
0.3.2 2022年7月11日
0.3.1 2022年7月4日
0.3.0 2020年6月8日
0.2.0 2020年3月25日

#7#shuffle

每月 32 次下载

MIT 许可证

21KB
438

rhuffle

crates.io Build Status

rhuffle 是一个用于大文件行随机排序器,文件大小可以超过可用RAM。

rhuffle 支持

  • 对不适合内存的大文件进行排序
  • 跳过不应该包含在排序中的头部行(例如csv/tsv)
  • 多文件输入和灵活的输入格式
  • rhuffle 运行非常快(见 基准测试结果。)

rhuffle_demo

安装

lib.rs

用法

USAGE:
    rhuffle [OPTIONS]

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

OPTIONS:
    -b, --buf <NUMBER>
            Sets buffer size which is smaller than available RAM with bytes (default: 4294967296).

        --dst <PATH>
            Sets destination file path. If not set, destination sets to stdout. (default: None)

        --feed <LF|LF_CRLF>                        Sets acceptable line feed as EOL (default: LF_CRLF).
    -h, --head <NUMBER>
            Sets first `n` lines without shuffling (default: 0). For multiple input sources, take README a look.

        --log <off|error|warn|info|debug|trace>    Sets log level. (default: off)
        --src <[PATH]>
            Sets source file paths (space separated). If not set, source sets to stdin. (default: None)

--head n 选项

  • 对于多个输入源,第一个输入源的前 n 行直接转发到输出源,不进行排序。
  • 对于第二个输入源及以后,第一个输入源的前 n 行将被跳过。
  • 以下是一个示例

in1.txt

head1-1
head2-1
line1-1
line2-1

in2.txt

head1-2
head2-2
line1-2
line2-2
$ rhuffle --src in1.txt in2.txt --dst out.txt --head 2

out.txt

head1-1 // L1-L2: fixed
head2-1 
line2-1 // L3-L6: shuffled globally
line1-2
line2-2
line1-1

--feed 选项

  • LF_CRLF(默认):接受LF或CRLF作为换行符
  • LF:只接受LF作为换行符
  • 没有为CR设置选项

基准测试

以下结果显示了在有限内存空间中的执行时间。使用了两个测试数据集。

使用三种软件进行性能比较。

  • GNU shuf
    • 命令: shuf {src} -o {dst}
  • terashuf
    • 命令: terashuf < {src} > {dst}
  • rhuffle
    • 命令: rhuffle --src {src} --dst {dst}

基准测试在MacBook Pro 2017、Core i7 3.1GHz、RAM 16GB上进行。执行时间由 time 测量。

Kaggle比赛数据集

5.3GB 大小,55423856 行

软件 真实 用户 系统
GNU shuf 0m59s 0m34s 0m14s
terashuf 5m06s 4m43s 0m14s
rhuffle 1m56s 1m06s 0m40s

自定义数据集

9.0GB 大小,21550072 行

软件 真实 用户 系统
GNU shuf x x x
terashuf 8m12s 7m16s 0m31s
rhuffle 1m47s 0m39s 0m51s

GNU shuf 无法测量(非常慢)。

依赖项

~6–16MB
~216K SLoC