只是想知道除了unix“split”之外,是否有更快的方法将文件拆分为N个块。
基本上我有大文件,我想将它们分成更小的块并并行操作每个块。
只是想知道除了unix“split”之外,是否有更快的方法将文件拆分为N个块。
基本上我有大文件,我想将它们分成更小的块并并行操作每个块。
我假设您使用split -b
的 CPU 效率将比按行拆分更高,但仍会读取整个输入文件并将其写入每个文件。如果这部分执行的串行性质split
是您的瓶颈,您可以使用dd
并行提取文件的块。每个并行进程都需要一个不同的dd
命令。这是一个示例命令行(假设the_input_file
是一个从中间提取一点的大文件):
dd skip=400 count=1 if=the_input_file bs=512 of=_output
要完成这项工作,您需要选择适当的count
and值bs
(上面的值非常小)。每个工作人员还需要选择不同的值,skip
以便块不会重叠。但这是有效的;使用查找操作dd
实现。skip
当然,这仍然不如以一种可以直接读取输入文件的指定块,与其他类似的消费者进程并行的方式实现数据消费者进程的效率。但我想如果你能做到这一点,你就不会问这个问题。
鉴于这是一个操作系统实用程序,我倾向于认为它已针对最佳性能进行了优化。
您可以查看此问题(或执行man -k split
or man split
)来查找您可以使用的相关命令,而不是split
.
如果您正在考虑用 C 语言实现自己的解决方案,那么我建议您针对自己的特定系统/环境和一些示例数据运行一些基准测试,并确定要使用的工具。
注意:如果您不打算经常这样做,那么考虑这么多可能不值得您花时间,只需继续使用一个工具来完成您需要它做的事情(在这种情况下split
)