【发布时间】:2015-07-09 13:26:37
【问题描述】:
我有一个像这样的 CSV
783582893T,2014-01-01 00:00,0,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582893T,2014-01-01 00:15,1,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582893T,2014-01-01 00:30,2,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582855T,2014-01-01 00:00,0,128,35.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582855T,2014-01-01 00:15,1,128,35.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582855T,2014-01-01 00:30,2,128,35.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
...
783582893T,2014-01-02 00:00,0,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582893T,2014-01-02 00:15,1,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582893T,2014-01-02 00:30,2,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
虽然有 50 亿条记录。如果您注意到第一列和第二列(当天)的一部分,则其中三个记录都“分组”在一起,只是当天前 30 分钟的 15 分钟间隔的细分。
我希望输出看起来像
783582893T,2014-01-01 00:00,0,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
783582855T,2014-01-01 00:00,0,128,35.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
...
783582893T,2014-01-02 00:00,0,124,29.1,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y,40.0,0.0,40,40,5,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,Y
重复行的前 4 列被省略,其余列与同类的第一条记录相结合。基本上我将一天从每行 15 分钟转换为每行 1 天。
由于我将处理 50 亿条记录,我认为最好的办法是使用正则表达式(和 EmEditor)或为此而设计的一些工具(多线程、优化),而不是自定义编程解决方案。虽然我对 nodeJS 或 C# 中相对简单且超级快速的想法持开放态度。
如何做到这一点?
【问题讨论】:
-
每条记录总是有 3 条记录吗?
-
因此,按第一列对行进行分组,从第一行获取前 4 列(组中的所有行都应该相同),然后从其他行到第一行。对吗?
-
是的,总是有 3 条记录(技术上是 96 条记录,但适用于这 3 条记录的解决方案应该不难适应 96 条记录)
-
而需要组合在一起的行(具有相同的第一列)总是连续的?它们永远不可能出现故障?
-
是的,它们不会出现故障。我编辑了一下没有任何价值,因为从技术上讲,您是在第一列和第二列的一部分进行分组。正如我所说,它从每行 15 分钟的间隔变为每行 1 天。因此,如果您愿意,日期时间的日期部分也是分组“键”的一部分。