2 个不稳定版本

使用旧的 Rust 2015

0.2.0 2018 年 2 月 5 日
0.1.0 2017 年 9 月 14 日

#2691 in 命令行工具

Unlicense/MIT

170KB
4K SLoC

Rjoin

rjoin 是一个新的命令行工具,用于在两个文件的公共字段上将记录连接起来。

双许可,MIT 或 unlicense

文档

https://docs.rs/rjoin

安装

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