2 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2018 年 2 月 5 日 |
---|---|
0.1.0 | 2017 年 9 月 14 日 |
#2691 in 命令行工具
170KB
4K SLoC
Rjoin
rjoin 是一个新的命令行工具,用于在两个文件的公共字段上将记录连接起来。
双许可,MIT 或 unlicense
文档
安装
rjoin 的二进制名称为 rj
。
$ cargo --version
cargo 0.25.0-nightly (a88fbace4 2017-12-29) # requires nightly channel
$ RUSTFLAGS="-C target-cpu=native" cargo install rjoin
(不要忘记将 $HOME/.cargo/bin
添加到您的路径中)。
为什么你应该使用 rjoin
?
- 它可以在多个字段上执行连接
- 它在指定字段分隔符和记录终止符方面比 GNU join 有更高的灵活性
- 它具有(主观上)更干净的 CLI。
为什么你不应该使用 rjoin
?
- 你需要特定的输出格式。GNU join 在此方面更灵活,但可以通过将输出管道到
awk
来减轻。 - 你需要一个不区分大小写的连接。可以通过使用
tr
工具预处理数据来减轻。 - 你的 CPU 不具备 AVX2 功能。
快速示例
假设我们有以下数据
$ cat left
color,blue
color,green
color,red
shape,circle
shape,square
$ cat right
altitude,low
altitude,high
color,orange
color,purple
要获取具有公共键的行
$ rj left right
color,blue,orange
color,blue,purple
color,green,orange
color,green,purple
color,red,orange
color,red,purple
一些注释
- 默认情况下,第一个字段是键。如果您想使用另一个字段,可以使用
--key/-k
选项(即使是针对每个文件)。rj
支持将 多个字段 作为键,但两个文件中键字段的数量必须相等。 - 默认情况下,只打印具有公共键的行。如果您还想打印左或右文件中的不匹配行,请使用以下选项的任何组合:
--show-left/-l
、--show-right/-r
或--show-both/-b
。请注意,但是,如果您使用这些选项中的任何一个,则默认行为将被重置(例如,如果您想同时看到左文件中的不匹配行和匹配行,请使用-lb
。使用-l
,您将看不到匹配的行。) - 两个文件中都有具有相同键的多个行,结果产生 笛卡尔积。
获取两个文件中不匹配键的行
$ rj -lr left right
altitude,low
altitude,high
shape,circle
shape,square
请查看教程以获取详细的操作步骤。
贡献
欢迎任何形式的贡献(例如评论、建议、问题、错误报告和拉取请求)。
为什么选择Rust?
因为C语言耗费了大量的心智资源,只是为了避免我的腿被射中,或者更糟的情况。
致谢
在Rjoin中使用的CSV解析器基于Y. Li, N. R. Katsipoulakis, B. Chandramouli, J. Goldstein和D. Kossmann的工作。Mison:用于数据分析的快速JSON解析器。在VLDB,2017。
SIMD部分毫不客气地复制自pikkr
最后,向BurntSushi为其卓越的工作表示衷心的感谢。
依赖项
~1.5MB
~17K SLoC