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 次下载
21KB
438 行
rhuffle
rhuffle 是一个用于大文件行随机排序器,文件大小可以超过可用RAM。
rhuffle 支持
- 对不适合内存的大文件进行排序
- 跳过不应该包含在排序中的头部行(例如csv/tsv)
- 多文件输入和灵活的输入格式
- rhuffle 运行非常快(见 基准测试结果。)
安装
见 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设置选项
基准测试
以下结果显示了在有限内存空间中的执行时间。使用了两个测试数据集。
- Kaggle比赛数据集(纽约市出租车费预测)
- (自有的)自定义数据集
使用三种软件进行性能比较。
- 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