首页 > 解决方案 > 将 21 亿行的大型 csv 文件拆分为以列为 ID 的较小文件

问题描述

我有一个 1TB 的csv文件格式

 id   data1   data2 ...
001      x1      y2
001      x2      y2
002      x1      y1
...     ...     ...

我希望每个 ID 都有一个文件,如

[001.csv]
001      x1      y2
001      x2      y2

[002.csv]
002      x1      y1

该文件包含带引号的字符串,并且不按 ID 排序。我可以运行查询以提前了解所有 ID。

在 linux 命令行或 python 中执行此操作的最佳方法是什么?

标签: pythonbash

解决方案


在命令行上试试这个 - awk 很棒而且很优雅。(确保下面的双引号之间有正确数量的空格 - 即 id 和 data1 之间的空格

$ awk -F"   " '{print >$1".csv"}'  <your_1Tb_file>

这将创建 001.csv、002.csv 等文件

根据有关跳过第一行的评论进行编辑 - 您可能会这样做。这是一个 - 在 awk 之前添加一个管道。

$ tail +2 <your_1Tb_file> |  awk -F"   " '{print >$1".csv"}'

推荐阅读