3

只是想知道除了unix“split”之外,是否有更快的方法将文件拆分为N个块。

基本上我有大文件,我想将它们分成更小的块并并行操作每个块。

4

2 回答 2

1

我假设您使用split -b的 CPU 效率将比按行拆分更高,但仍会读取整个输入文件并将其写入每个文件。如果这部分执行的串行性质split是您的瓶颈,您可以使用dd并行提取文件的块。每个并行进程都需要一个不同的dd命令。这是一个示例命令行(假设the_input_file是一个从中间提取一点的大文件):

dd skip=400 count=1 if=the_input_file bs=512 of=_output

要完成这项工作,您需要选择适当的countand值bs(上面的值非常小)。每个工作人员还需要选择不同的值,skip以便块不会重叠。但这是有效的;使用查找操作dd实现。skip

当然,这仍然不如以一种可以直接读取输入文件的指定块,与其他类似的消费者进程并行的方式实现数据消费者进程的效率。但我想如果你能做到这一点,你就不会问这个问题。

于 2012-05-16T23:13:32.707 回答
0

鉴于这是一个操作系统实用程序,我倾向于认为它已针对最佳性能进行了优化。

您可以查看此问题(或执行man -k splitor man split)来查找您可以使用的相关命令,而不是split.

如果您正在考虑用 C 语言实现自己的解决方案,那么我建议您针对自己的特定系统/环境和一些示例数据运行一些基准测试,并确定要使用的工具。

注意:如果您不打算经常这样做,那么考虑这么多可能不值得您花时间,只需继续使用一个工具来完成您需要它做的事情(在这种情况下split

于 2012-05-16T23:05:36.313 回答