在linux上的一个巨大的文件上快速尾巴


3

我需要获得1亿行文件的最后1000万行。

tail -n 10000000 $ in_file> $ out_file

但是上面的命令花了超过1天而且还在继续。我想我可以使用nice命令为进程分配更多优先级,但我想知道是否存在一种从根本上更好的方法。


硬盘还是SSD?
Makoto

1亿行是一个非常庞大的文件,不是吗?难道你不能把以前分成几个碎片的文件?这肯定会减少EOL搜索,从而为您提供一些加速。固态硬盘也是一个非常棒的扩展镜头(:
鲁本斯

大概是多长一行(或文件有多大,以字节为单位)?线条的尺寸是否合理均匀,还是有短线和长线要担心?如果标准工具不能及时完成工作,那么您可能需要自己编写。令人恼火的是,你可能需要扫描文件的尾端至少两次,但可能是不可避免的。
Jonathan Leffler

Answers:


3

除了将文件拆分成一些较小的文件之外,您只需打开文件并将其设置为您可能认为接近文件末尾的文件。

在那之后,你会读到尽可能多的线条,并且,如果你EOF没有所有10000000个所需线条,你只需要从你猜到的第一个位置和一个新的 - 先前位置做出差异,并尝试读取n = diff线。

我实际上不知道是否tail这样做,或者是否有任何可用的POSIX工具执行此类操作; 执行此操作不应超过五分钟,我想(: 可能会有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.