【发布时间】:2015-02-20 10:49:00
【问题描述】:
您能帮我找到 bash 命令,它将加入/合并以下 cvs 文件“template.csv + file1.csv + file2.csv + file3.csv + ... + fileX.csv”到“输出.csv”。
对于 template.csv 中的每一行,连接 fileX.csv 中列出的相关值(如果存在),如下所示:
模板.csv:
header
1
2
3
4
5
6
7
8
9
file1.csv:
header,value1
2,value12
3,value13
7,value17
8,value18
9,value19
file2.csv:
header,value2
1,value21
2,value22
3,value23
4,value24
file3.csv:
header,value3
2,value32
4,value34
6,value36
7,value37
8,value38
输出.csv:
header,value1,value2,value3
1,,value21,
2,value12,value22,value32
3,value13,value23,
4,,value24,value34
5,,,
6,,,value36
7,value17,,value37
8,value18,,value38
9,value19,,
我的模板文件包含 35137 行。
我已经开发了一个执行此合并的 bash 脚本(基于“do while”等),但性能一点也不好。制作 output.csv 的时间太长。我确信可以使用 join、awk 来做同样的事情……但我不明白如何……
重要更新
我的真实文件的第一列包含一个日期时间而不是一个简单的数字......所以脚本必须考虑日期和时间之间的空间......抱歉更新!
现在应该使用以下 csv 文件设计脚本:
模板.csv:
header
2000-01-01 00:00:00
2000-01-01 00:15:00
2000-01-01 00:30:00
2000-01-01 00:45:00
2000-01-01 01:00:00
2000-01-01 01:15:00
2000-01-01 01:30:00
2000-01-01 01:45:00
2000-01-01 02:00:00
file1.csv:
header,value1
2000-01-01 00:15:00,value12
2000-01-01 00:30:00,value13
2000-01-01 01:30:00,value17
2000-01-01 01:45:00,value18
2000-01-01 02:00:00,value19
file2.csv:
header,value2
2000-01-01 00:00:00,value21
2000-01-01 00:15:00,value22
2000-01-01 00:30:00,value23
2000-01-01 00:45:00,value24
file3.csv:
header,value3
2000-01-01 00:15:00,value32
2000-01-01 00:45:00,value34
2000-01-01 01:15:00,value36
2000-01-01 01:30:00,value37
2000-01-01 01:45:00,value38
输出.csv:
header,value1,value2,value3
2000-01-01 00:00:00,,value21,
2000-01-01 00:15:00,value12,value22,value32
2000-01-01 00:30:00,value13,value23,
2000-01-01 00:45:00,,value24,value34
2000-01-01 01:00:00,,,
2000-01-01 01:15:00,,,value36
2000-01-01 01:30:00,value17,,value37
2000-01-01 01:45:00,value18,,value38
2000-01-01 02:00:00,value19,,
【问题讨论】: