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

时间:2010-02-10 14:52:04

标签: unix shell

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

我怎样才能在unix下快速执行此操作(实际上是Solaris,因此gnu风格不可用)。

THX

4 个答案:

答案 0 :(得分:44)

打印第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

答案 1 :(得分:1)

我编写了一个名为splitter的Haskell程序,它正是这样做的:有一个read through my release blog post

您可以按如下方式使用该程序:

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

这将获得第4行,第6行和第10行以及第50行。这就是它的全部内容。您将需要Haskell来安装它。只是:

$ cabal install splitter

你完成了。我希望你发现这个程序很有用。

答案 2 :(得分:0)

你也可以用nawk

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

答案 3 :(得分:0)

或者

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