如何从Unix上的文本文件中提取预定范围的行?我有一个~23000行的SQL转储包含几个数据库的数据。我需要提取此文件的某个部分(即单个数据库的数据)并将其放在一个新文件中。我知道我想要的数据的起始行和结束行号。有没有人知道一个Unix命令(或一系列命令)从第16224和16482行之间的文件中提取所有行,然后将它们重定向到一个新文件?
3 回答
LEATH
TA贡献1936条经验 获得超6个赞
sed -n '16224,16482p;16483q' filename > newfile
从sed手册:
p - 打印出图案空间(到标准输出)。此命令通常仅与-n命令行选项一起使用。
n - 如果未禁用自动打印,则打印图案空间,然后,无论如何,将图案空间替换为下一行输入。如果没有更多输入,那么sed退出而不再处理任何命令。
q - 退出
sed
而不处理更多命令或输入。请注意,如果未使用-n选项禁用自动打印,则会打印当前模式空间。
sed脚本中的地址可以采用以下任何一种形式:
number 指定行号仅匹配输入中的该行。
可以通过指定用逗号(,)分隔的两个地址来指定地址范围。地址范围匹配从第一个地址匹配的行开始,并继续直到第二个地址匹配(包含)。
白衣染霜花
TA贡献1796条经验 获得超10个赞
sed -n '16224,16482 p' orig-data-file > new-file
16224,16482是起始行号和结束行号,包括在内。这是1索引的。 -n
抑制将输入作为输出回显,这显然是你不想要的; 数字表示使以下命令操作的行数范围; 该命令p
打印出相关的行。
温温酱
TA贡献1752条经验 获得超4个赞
使用头/尾非常简单:
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
添加回答
举报
0/150
提交
取消