我需要从给定起始行号和结束行号的文件中提取一定数量的行。
我怎样才能在unix下快速执行此操作(实际上是Solaris,因此gnu风格不可用)。
THX
答案 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"