从一个非常大的文件中获取n个中间行的有效方法

Mah*_*esh 6 unix tail head

我有一个60GB左右的大文件.

我需要得到文件的n个中间行.我正在使用头部和尾部的commnad

tail -m file |head -n >output.txt
where m,n are numbers
Run Code Online (Sandbox Code Playgroud)

该文件的一般结构如下所示,带有记录集.(逗号分隔列.),每行可以有不同的长度(比如最多5000个字符).

col1,col2,col3,col4...col10
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以用更少的时间占用中间线,因为当前命令需要花费大量时间来执行.

提前致谢.

per*_*eal 11

使用sed,您至少可以删除管道:

sed -n '600000,700000p' file > output.txt
Run Code Online (Sandbox Code Playgroud)

将打印行600000到700000.

  • 如果在最后请求的行之后有很多行,添加一个“q”命令可能会有所帮助:`sed -n '600000,700000p;700000q' file`。否则, sed 将继续运行,直到读取文件的最后一行(即使没有打印任何内容)。 (2认同)

Ani*_*ani 5

awk'FNR> = n && FNR <= m'

后跟文件名.


Mar*_*coS 0

我能想到的加快搜索速度的唯一可能的解决方案是构建和索引您的行,例如:

 0 00000000
 1 00000013
 2 00000045
   ...
 N 48579344
Run Code Online (Sandbox Code Playgroud)

然后,知道索引长度,您可以快速跳转到数据文件的中间(或您喜欢的任何地方......)。当然,当文件更改时,您应该保持索引更新......

显然,此类问题的规范解决方案是将数据保存在数据库中(例如,参见SQLite),而不是保存在普通文件中......:-)