使用Miller按列拆分巨大的CSV

时间:2019-04-15 08:47:27

标签: csv

我需要每天拆分巨大的(> 1 Gb)CSV文件,每个文件包含50K +列。

我发现Miller是执行此类任务的有趣且高效的工具。

但是我只能留在Miller的文档上。

如何将一个CSV拆分为N个较小的CSV文件,其中N是源文件中的许多行?

2 个答案:

答案 0 :(得分:2)

尝试使用此脚本

mlr --csv put -S 'if (NR % 10000 == 0) {$rule=NR} else {$rule = ""}' \
then fill-down -f rule \
then put -S 'if ($rule=="") {$rule="0"}' \
then put -q 'tee > $rule.".csv", $*' input.csv

在新文件夹中复制CSV副本,然后在其上运行此脚本。 每10000行将产生一个csv文件。

答案 1 :(得分:1)

来自 aborruso 的答案确实在输出 csv 文件中添加了一个新列 rule。 如果您想避免这种情况,请在最后一步使用 emitmapexcept 而不是 tee,如下所示:

mlr --csv put -S 'if (NR % 10000 == 0) {$rule=NR} else {$rule = ""}' \
then fill-down -f rule \
then put -S 'if ($rule=="") {$rule="0"}' \
then put -q 'emit > $rule.".csv", mapexcept($*, "rule")' input.csv