【发布时间】:2018-03-11 19:36:42
【问题描述】:
我有 4 个 100GB 的 csv 文件,其中两个字段需要连接。幸运的是,这两个字段彼此相邻。
我的想法是从每行中删除第 41 次出现的 ",",然后我的两个字段将正确合并并准备上传到我使用的分析工具。
开发机器是具有 4 x 3.6GHz 和 64G RAM 的 Windows 10 机器,我将文件推送到具有 40 x 2.4GHz 和 512G RAM 的 Centos 7 系统上的服务器。我在服务器上有 sudo 访问权限,如果有人有依赖于 Linux 工具的解决方案,我可以在技术上更改文件。我们的想法是以最快/最简单的方式完成任务。我必须每月重复一次这项任务,并且会欣喜若狂地自动化它。
我最初的实现方法是将 csv 加载到 MySQL,连接字段并删除旧字段。再次将表导出为 csv 并推送到服务器。这需要两天时间,而且很费力。
现在我在学习使用 sed 还是使用我更熟悉的东西(如 node.js)将文件逐行流式传输到新文件然后推送这些文件之间纠结到服务器。
如果您推荐使用 sed,我已经阅读了 here 和 here,但不知道如何从每一行中删除第 n 个出现。
编辑: Cyrus 要求提供样本输入/输出。 输入文件格式如下:
"field1","field2",".........","field41","field42","......
输出文件格式如下:
"field1","field2",".........","field41field42","......
【问题讨论】:
-
您的 csv 是否在双引号之间也有
,? -
“从每一行”部分基本上是 sed 和类似工具的整体思想,所有命令都应用于每一行输入。
-
您对正则表达式的熟悉程度如何?有一些 *nix 命令行实用程序可以使用正则表达式执行此操作。 (sed 甚至可能是其中之一)
-
请在您的问题中添加示例输入和该示例输入所需的输出。
-
对于这些巨大的文件,一个问题是磁盘空间,因为大多数文本处理工具会创建一个临时文件来写入更改。我发现这篇文章非常好:backreference.org/2011/01/29/in-place-editing-of-files