从大于可用 RAM+VM 的文件中获取选定行

从大于可用 RAM+VM 的文件中获取选定行

从文本文件中取出片段的最佳方法是什么?许多其他的在右侧边栏中有几乎重复。

唯一的区别是我的文件太大,无法容纳在可用的 RAM+VM 中,因此我尝试的任何操作不仅在几分钟内不会执行任何操作,直到被杀死,而且还会使系统陷入困境。其中之一让我什么都做不了,直到系统崩溃。

我可以在 shell 或任何其他 shell 中编写一个循环来读取、计数和丢弃行,直到达到计数(所需的行号),但也许已经存在一个可以执行此操作的命令?

在尝试了一些东西(vim、head -X | tail -1、GUI 编辑器)之后,我放弃了,删除了该文件并更改了创建它的程序,只提供了所需的行。

进一步看,打开大小大于 RAM 的文件,不使用交换区。建议 vi 应该这样做,但如果 vi 是相同的,它肯定是在做一些需要几分钟而不是几秒钟的事情。

答案1

你应该试试less

来自联机帮助页:

Also, less does not have to read the entire input file before starting, so with large input files it starts up faster than text editors like vi (1).

我经常用更少的资源打开大文件,并且启动时间没有问题。如果将它与选项结合起来-jn,您基本上可以在很短的时间内到达文件的每个部分。

我没有测试这个,因为我需要一个相当大的文件,但与头部结合,您也可以使用more更适合脚本编写的脚本。

more +$START_LINE_NUMBER | head -n$AMOUNT_OF_LINES

如果我理解正确的话,头部应该在获得所需数量的线路后完成管道过程,所以这个解决方案应该是您正在寻找的低开销解决方案。

相关内容