【发布时间】:2011-01-15 07:25:16
【问题描述】:
在给定起始行号和结束行号的情况下,我需要从文件中提取一定数量的行。
如何在 unix 下快速做到这一点(它实际上是 Solaris,所以 gnu 风格不可用)。
谢谢
【问题讨论】:
在给定起始行号和结束行号的情况下,我需要从文件中提取一定数量的行。
如何在 unix 下快速做到这一点(它实际上是 Solaris,所以 gnu 风格不可用)。
谢谢
【问题讨论】:
我编写了一个名为 splitter 的 Haskell 程序,它正是这样做的:有一个 read through my release blog post。
您可以按如下方式使用该程序:
$ cat somefile | splitter 4,6-10,50-
这将得到第 4 行、第 6 行到第 10 行以及第 50 行。这就是它的全部。您将需要 Haskell 来安装它。只是:
$ cabal install splitter
你就完成了。我希望你觉得这个程序很有用。
【讨论】:
或者
head -n "$last" file | tail -n +"$first"
【讨论】:
要打印第 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
【讨论】:
10q 表示对于第 10 行,运行命令q,即“退出”。所以,sed 将在第 10 行退出。
你也可以用 nawk 做到这一点
#!/bin/sh
start=10
end=20
nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file
【讨论】: