在unix中拆分文件

时间:2012-05-16 23:01:06

标签: performance unix split bigdata

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

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

2 个答案:

答案 0 :(得分:1)

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

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

要完成这项工作,您需要选择countbs的适当值(上述值非常小)。每个工作人员还需要选择不同的skip值,以便块不重叠。但这很有效; dd通过搜索操作实现skip

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

答案 1 :(得分:0)

鉴于这是一个OS实用程序,我倾向于认为它是针对最佳性能进行优化的。

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

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

注意:如果你不打算定期这样做,那么考虑这个问题可能不值得你花点时间,只需继续使用一个能满足你需要的工具它要做(在这种情况下split