只是想知道是否有一种更快的方法可以将文件分割为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
和bs
的适当值(上面的值很小)。每个工作人员还需要选择不同的skip
值,以使块不会重叠。但这是有效的。 dd
通过搜索操作实现skip
。当然,这仍然不如实现数据使用者进程那样高效,因为它可以与其他类似的使用者进程并行地直接读取输入文件的指定块。但是我认为,如果您可以这样做,您就不会问这个问题。
关于performance - 在UNIX中分割文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10627908/