为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

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

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

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


查看完整描述

3 回答

?
LEATH
sed -n '16224,16482p;16483q' filename > newfile

sed手册

p - 打印出图案空间(到标准输出)。此命令通常仅与-n命令行选项一起使用。

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

q - 退出sed而不处理更多命令或输入。请注意,如果未使用-n选项禁用自动打印,则会打印当前模式空间。

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

number 指定行号仅匹配输入中的该行。

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


查看完整回答
反对 回复 2019-08-14
?
白衣染霜花
sed -n '16224,16482 p' orig-data-file > new-file

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


查看完整回答
反对 回复 2019-08-14
?
幕布斯5086720

使用头/尾非常简单:

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


查看完整回答
反对 回复 2019-08-14
  • 3 回答
  • 0 关注
  • 117 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信