我如何从Unix上的文本文件中提取预定范围的行?

我有一个〜23000行SQL转储包含几个数据库值的数据。 我需要提取该文件的某个部分(即单个数据库的数据)并将其放在一个新文件中。 我知道我想要的数据的开始和结束行号。

有没有人知道一个Unix命令(或一系列命令)提取行16224和16482之间的文件中的所有行,然后将它们重定向到一个新文件?


sed -n 16224,16482p filename > newfile

从sed手册:

p - 打印模式空间(到标准输出)。 该命令通常仅与-n命令行选项结合使用。

n - 如果未禁用自动打印,请打印图案空间,然后,不管如何,用下一行输入替换图案空间。 如果没有更多的输入,则sed退出而不处理任何更多的命令。

sed脚本中的地址可以采用以下任何形式:

数字指定行号只会匹配输入中的那一行。

地址范围可以通过指定由逗号(,)分隔的两个地址来指定。 地址范围匹配从第一个地址匹配的地方开始的行,并且一直延续到第二个地址匹配(包含地)。


sed -n '16224,16482 p' orig-data-file > new-file

其中16224,16482是起始行号码和结束行号码,包括在内。 这是1索引。 -n抑制将输入作为输出回显,这显然不希望; 数字表示使下列命令操作的行的范围; 命令p打印出相关的行。


非常简单的使用头部/尾部:

head -16482 in.sql | tail -258 > out.sql

使用sed:

sed -n '16482,16482p' in.sql > out.sql

使用awk:

awk 'NR>=10&&NR<=20' in.sql > out.sql
链接地址: http://www.djcxy.com/p/30349.html

上一篇: How can I extract a predetermined range of lines from a text file on Unix?

下一篇: MySQL: How to export and import a .sql file from command line?