【发布时间】:2016-09-15 15:01:41
【问题描述】:
我对使用 GNU 并行将多 GB CSV 数据库导出文件拆分为可管理的块的速度感到非常满意。但是,我遇到的问题是我希望输出文件名的格式为 some_table.csv.part_0000.csv 和 从零开始(导入工具需要这样做)。获得“0001”是一个挑战,但我设法使用 printf 来实现这一点。我无法让减量起作用。
我的命令:
FILE=some_table; parallel -v --joblog split.log --pipepart --recend '-- EOL\n' --block 25M "cat > $FILE.csv.part_$(printf "%04d"{#}).csv" :::: $FILE.csv
执行表达式扩展 ($FILE.csv.part_$(({#}-1)).csv) 之类的操作不起作用,因为 {#} 会混淆内部子外壳。 PART=$(({#}-1)); cat > $FILE.csv.part_$PART.csv也是如此。
有什么建议吗?
【问题讨论】:
-
您想对这些 CSV 文件做什么?换句话说,你为什么要分裂呢?
-
这些是平面文件导出,将使用 mysqlimport 加载到 AWS RDS。通过将它们分成块,事务大小更加合理,并且更容易在错误时恢复。这是大意:(nerds.airbnb.com/mysql-in-the-cloud-at-airbnb)
-
这不是
split的工作吗? -
同意,使用
split(或awk)代替parallel。
标签: bash gnu-parallel