1 个稳定版本
1.0.0 | 2022年2月17日 |
---|
#16 在 #tsv
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.tsv
和 2.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