如何从 CSV 文件中按名称提取列

如何从 CSV 文件中按名称提取列

我有超过 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

相关内容