用bash在一个巨大的文件中获取一行

Jav*_*cky 17 bash

如何在3 gig文本文件中获取特定行.所有线路都有:

  • 相同的长度,和
  • 由...划界\n.

我需要能够按需获得任何线路.

如何才能做到这一点?只需要返回一行.

cam*_*amh 21

如果所有行都具有相同的长度,那么到目前为止最好的方法是使用dd(1)并给它一个跳过参数.

让块大小为每行的长度(包括换行符),然后你可以这样做:

$ dd if=filename bs=<line-length> skip=<line_no - 1> count=1 2>/dev/null
Run Code Online (Sandbox Code Playgroud)

我们的想法是寻找过去所有前面的行(skip=<line_no - 1>)并读取一行(count=1).因为块大小设置为行长度(bs=<line-length>),所以每个块实际上是一行.重定向stderr,这样你就不会在最后得到烦人的统计数据.

这应该比通过程序读取所有行之前将行流式传输然后将它们丢弃一样高效,因为它dd会在文件中寻找您想要的位置并从文件中只读取一行数据.


Pau*_*sey 15

head -10 file | tail -1 虽然返回第10行可能很慢.

这里开始

# print line number 52 
sed -n '52p' # method 1 
sed '52!d' # method 2 
sed '52q;d' # method 3, efficient on large files
Run Code Online (Sandbox Code Playgroud)