从给定开始和结束行号的文件中获取一系列行

我需要从给定起始行号和结束行号的文件中提取一定数量的行。

我怎么能在UNIX下迅速做到这一点(它实际上是Solaris,所以gnu的味道是不可用的)。

谢谢

要打印6-10行:

sed -n '6,10p' file 

如果文件很大,并且行数与行数相比较小,则可以通过以下方法使其更加高效:

 sed -n '10q;6,10p' file 

从测试一个相当多的行文件:

 $ wc -l test.txt 368048 test.txt $ du -k test.txt 24640 test.txt $ time sed -n '10q;6,10p' test.txt >/dev/null real 0m0.005s user 0m0.001s sys 0m0.003s $ time sed -n '6,10p' test.txt >/dev/null real 0m0.123s user 0m0.092s sys 0m0.030s 

我写了一个名为splitter的Haskell程序,完成这个工作: 阅读我发布的博客文章 。

您可以使用该程序如下:

 $ cat somefile | splitter 4,6-10,50- 

这将得到四,六,十和五十行之后。 这就是这一切。 你将需要Haskell来安装它。 只是:

 $ cabal install splitter 

你完成了。 我希望你觉得这个程序有用。

你也可以用nawk来做

 #!/bin/sh start=10 end=20 nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file 

要么

 head -n "$last" file | tail -n +"$first"