bash从文件中拉出某些行

mik*_*ike 16 bash file-io

我想知道是否有更有效的方法来完成这项任务.我正在处理文件的行数从几十万到几百万不等.假设我知道100,000 - 125,000行是包含我正在寻找的数据的行.我想知道是否有一种快速方法从文件中提取这些所需的行.现在我正在使用像这样的grep循环:

 for ((i=$start_fid; i<=$end_fid; i++))
  do
    grep "^$i " fulldbdir_new >> new_dbdir${bscnt}
  done
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,它的使用时间比我想要的要长.这些行包含的不仅仅是数字.基本上每行有大约10个字段,第一个是连续整数,每个文件只出现一次.

如果有必要,我很乐意用C语写作.

Cos*_*sta 22

sed 可以做的...

sed -n '100000,125000p' input

编辑:根据格伦杰克曼的建议,可以这样调整效率......

sed -n '100000,125000p; 125001q' input

  • 使用`sed -n'100000,125000p增加一些效率; 125001q'` (4认同)
  • 这些字母是告诉`sed`如何处理你引用的模式空间的方法.在这种情况下,'100000,125000p'部分表示**打印**模式空间100000,125000(即行号100000到125000),'125001q'部分告诉它**行退出**因为你已经得到了你所需要的东西. (2认同)

mhy*_*itz 5

我用awk:

awk 'NR >= 100000; NR == 125000 {exit}' file
Run Code Online (Sandbox Code Playgroud)

对于大数字,您也可以使用E表示法:

awk 'NR >= 1e5; NR == 1.25e5 {exit}' file
Run Code Online (Sandbox Code Playgroud)

编辑:@glenn jackman的建议(参见评论)

  • 使用"NR> 125000 {exit}"节省时间 (3认同)