【发布时间】:2016-10-04 07:12:38
【问题描述】:
我有一百个 CSV 文件,每个文件有 20 万行,压缩为 gzip。
所有具有相同结构的文件。第 15 列和第 18 列包含 companyID 和操作。
两列在一行中都是唯一的。
我想为每个 copanyID.action 创建一个文件。
现在我运行这个命令:
zcat * | grep 'companyID.*action' | gzip > companyID.action.gz
为了避免磁盘 IO,我对所有内容进行管道传输。
问题是我们有数百家公司和大约 20 个行动。 对每个 companyID X 操作运行此命令每次都会扫描整个数据。
我正在寻找一种解决方案,即扫描输入文件一次并在正确的文件中写入一行,如果文件不存在,则创建一个。
我更喜欢 bash 或 Golang 代码,但速度很重要,因此每个解决方案都值得一试
【问题讨论】:
-
zcating 所有文件并通过相关列将输出传送到sort怎么样? -
@choroba
sort不会将输出拆分为不同的文件。 -
@Barmar:这将是下一步,但一旦对数据进行排序,这将是微不足道的。
-
@choroba 不是同一个问题吗?为什么将同一个文件的所有行放在一起会更容易?
-
@Barmar:如果整个结构太大而无法保存在内存中,它仍然可以工作。