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