我有超过 150 个 CSV 文件,在 MAC (Unix) 上列不一致,例如:
板材A
ID | 科尔 | 移动的 | 电子邮件 | 辅助手机 | 姓名 |
---|---|---|---|---|---|
v | v | v | v | v | v |
v | v | v | v | v | v |
乙片
ID | 科尔 | 科尔 | 科尔 | 科尔 | 科尔 |
---|---|---|---|---|---|
v | v | v | v | v | v |
v | v | v | v | v | v |
表C
坳 | 电子邮件 | 移动的 | 姓名 | 科尔 | 坳 |
---|---|---|---|---|---|
v | v | v | v | v | v |
v | v | v | v | v | v |
表D
ID | 坳 | 坳 | 坳 | 移动的 | 坳 |
---|---|---|---|---|---|
v | v | v | v | v | v |
v | v | v | v | v | v |
我需要从上述每个工作表中派生出一个新工作表,其中包含以下列(如果存在)
ID、姓名、电子邮件、手机、SECONDARY_MOBILE
然后我将使用 CAT 将新导出的工作表合并为一张工作表。这样我就可以将数据上传到 Oracle DB 中。
所以,当涉及到 SHEET D 时,我想,派生表应该是
ID | 姓名 | 电子邮件 | 移动的 | SECONDARY_MOBILE |
---|---|---|---|---|
V | ||||
V |
我希望这是清楚的。提前致谢。
答案1
尽管有 IETF RFC,但 CSV 是一系列格式,而不仅仅是一种格式。因此,即使您找到了一些声称可以执行您想要的操作的东西,它也可能无法理解您的文件格式所用的 CSV 的特定变体。UnixODBC 没有 CSV 解析器。 Python 和 PHP 都有非常强大且灵活的解析器。我更熟悉后者/估计我需要大约 30 分钟才能编写所需的代码。 OTOH 将数据按原样导入 Oracle,然后规范化结构可能会花费同样多的工作。
答案2
使用磨坊主并从这 3 个文件开始示例
#input_01.csv
a,b,c
0,2,5
#input_02.csv
b,a,c
0,2,5
#input_03.csv
b,a
0,2
你可以跑
mlr --csv cut -f a,b then unsparsify input_0*.csv >output.csv
具有
a,b
0,2
2,0
2,0