1 个稳定版本

1.0.0 2022年2月17日

#16#tsv

MIT 协议

28KB
556

固话:CSV 数据整合器

简介

固话是一个命令行工具,允许像这样组合 CSV/TSV 文件

输入 1输入 2
Country	Population
China	1.41B
India	1.39B
US	333M
Country	Area
Canada	10M km²
US	9.8M km²
China	9.6M km²

输出

Country	Population	Area
China	1.41B	9.6M km²
India	1.39B	N/A
US	333M	9.8M km²
Canada	N/A	10M km²

安装

安装 Rust,然后运行

cargo install solidify

使用方法

基本使用

以下命令可以重现入门示例

solidify -i 1.tsv 2.tsv -o out.tsv --shared 1 --filler N/A

在这里 --shared 1 指的是第一列是 1.tsv2.tsv 之间的共享列——并且是这一列的内容用于识别和匹配文件中的记录。

输入文件

您可以使用 -i--inputs 指定要组合的两个或多个输入文件

-i 1.tsv 2.tsv
--inputs a.csv b.csv c.csv

输出

您必须使用 -o--output 指定输出文件

-o out.tsv
--output combined.csv

为了防止意外覆盖数据,输出路径必须与所有输入路径不同。

分隔符

固话不会尝试自动检测数据中使用的分隔符,因此您需要手动指定一个(相同的分隔符也将应用于输出)。如果没有提供分隔符,则默认使用制表符字符(" ")。为了防止在指定分隔符时出现任何错误,如果输入文件似乎只有一个列(除非您明确允许),固话将退出并显示错误。

当前仅接受 ASCII 字符作为分隔符。您可以使用 -d--delimiter 提供一个分隔符

-d ,
--delimiter "	"

共享列

使用 -s--shared,您可以指定哪些数据列在输入文件之间是共享的(如果有多个列,每个值必须通过重复选项单独提供)

-s 1
--shared 3
-s 2 -s 3 -s 8

这些列将用于识别哪些记录应该匹配和合并。

反向索引

负值表示逆序的列,即 -1 表示最后一列,-2 表示倒数第二列,依此类推。为了保证输出数据的一致性,不允许在任一输入文件中负索引列出现在正索引列之前。

全部合并与不合并

如果没有指定共享列,任何一对记录都将被视为匹配(允许 多路合并)。

例如,对 简介示例 运行

solidify -i 1.tsv 2.tsv -o out.tsv --multi

将生成以下输出

Country	Population	Country	Area
China	1.41B	Canada	10M km²
India	1.39B	US	9.8M km²
US	333M	China	9.6M km²

相比之下,如果提供特殊的 0 值作为 -s/--shared 的值,则不会考虑任何记录匹配。运行

solidify -i 1.tsv 2.tsv -o out.tsv -s 0 -s 1 --filler N/A

将因此生成

Country	Population	N/A
China	1.41B	N/A
India	1.39B	N/A
US	333M	N/A
Country	N/A	Area
Canada	N/A	10M km²
US	N/A	9.8M km²
China	N/A	9.6M km²

单列输入

为了防止在指定 分隔符 时出现任何错误,如果每个输入文件似乎只有一个列,Solidify 将以错误退出。为了允许处理此类输入,请传递 --single 标志。

多路合并

当数据允许以多种方式匹配记录时,Solidify 需要传递 --multi 标志以继续。如果设置了该标志,记录将按其在输入文件中出现的顺序进行匹配(有关示例,请参阅 全部合并与不合并)。

填充

--filler 的值决定了未匹配单元格的内容(简介示例 中的 N/A)。如果没有提供,将使用空字符串。

警告相似记录

为了跟踪由于输入错误而没有匹配的记录,您可以设置 --warn-similar 为正整数。如果一对记录之间的综合编辑距离不超过此值,但记录并不相同,则将显示警告。仅比较声明为 共享 的列中的值。

警告未匹配记录

当设置 --warn-unmatched 标志时,将报告无法与至少一个其他输入文件中的任何记录匹配的任何记录。

依赖关系

~5.5MB
~90K SLoC