2012-05-16 73 views
3

想知道是否有更快的方式将文件拆分为除unix“拆分”以外的N个块。拆分unix中的文件

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

+0

不确定什么要求在这个问题上-1,但没关系 – Abhi

回答

1

我假设你正在使用split -b这比通过行分割更具CPU效率,但仍读取整个输入文件并将其写入每个文件。如果split这部分的执行的串行性质是您的瓶颈,则可以使用dd并行提取文件的块。对于每个并行进程,您将需要一个不同的dd命令。这里有一个例子命令行(假设the_input_file是一个大文件这种提取位从中间):

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

为了使这项工作,你需要选择的countbs适当的值(以上这些都是非常小) 。每个工人还需要选择不同的值skip,以便块不重叠。但这是有效的; dd执行skip查找操作。

当然,这仍然不如实现数据使用者进程那样有效,因为它可以直接读取指定的输入文件块,并与其他类似的使用者进程并行读取。但我假设你能做到这一点,你不会问这个问题。

0

鉴于这是一个OS实用程序,我倾向于认为它已经过优化以获得最佳性能。

您可以看到this question(或执行man -k splitman split)来查找可能可以使用的相关命令,而不是split

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

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