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

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

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

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


长风秋雁
浏览 573回答 3
3回答

LEATH

sed -n '16224,16482p;16483q' filename > newfile从sed手册:p - 打印出图案空间(到标准输出)。此命令通常仅与-n命令行选项一起使用。n - 如果未禁用自动打印,则打印图案空间,然后,无论如何,将图案空间替换为下一行输入。如果没有更多输入,那么sed退出而不再处理任何命令。q - 退出sed而不处理更多命令或输入。请注意,如果未使用-n选项禁用自动打印,则会打印当前模式空间。和sed脚本中的地址可以采用以下任何一种形式:number 指定行号仅匹配输入中的该行。可以通过指定用逗号(,)分隔的两个地址来指定地址范围。地址范围匹配从第一个地址匹配的行开始,并继续直到第二个地址匹配(包含)。

白衣染霜花

sed -n '16224,16482 p' orig-data-file > new-file16224,16482是起始行号和结束行号,包括在内。这是1索引的。 -n抑制将输入作为输出回显,这显然是你不想要的; 数字表示使以下命令操作的行数范围; 该命令p打印出相关的行。

温温酱

使用头/尾非常简单:head&nbsp;-16482&nbsp;in.sql&nbsp;|&nbsp;tail&nbsp;-258&nbsp;>&nbsp;out.sql使用sed:sed&nbsp;-n&nbsp;'16482,16482p'&nbsp;in.sql&nbsp;>&nbsp;out.sql使用awk:awk&nbsp;'NR>=10&&NR<=20'&nbsp;in.sql&nbsp;>&nbsp;out.sql
打开App,查看更多内容
随时随地看视频慕课网APP