我需要每天拆分巨大的(> 1 Gb)CSV文件,每个文件包含50K +列。
我发现Miller是执行此类任务的有趣且高效的工具。
但是我只能留在Miller的文档上。
如何将一个CSV拆分为N
个较小的CSV文件,其中N
是源文件中的许多行?
答案 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
。
如果您想避免这种情况,请在最后一步使用 emit
和 mapexcept
而不是 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