我需要从给定起始行号和结束行号的文件中提取一定数量的行。
我怎么能在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"