【发布时间】:2015-03-03 07:40:43
【问题描述】:
我有一个大文件,但我需要其中的一部分,即m (1000) 行和n (2000) 行之间的行。
我怎样才能得到它? (并将其放入一个新的较小文件中,或在屏幕上打印)
【问题讨论】:
-
@sputnick:还没有。
-
将其标记为欺骗,当我们有一个确切的欺骗时,是合适的。
我有一个大文件,但我需要其中的一部分,即m (1000) 行和n (2000) 行之间的行。
我怎样才能得到它? (并将其放入一个新的较小文件中,或在屏幕上打印)
【问题讨论】:
42 到 96 之间的行:
sed -n '42,96p' oldfile > newfile
【讨论】:
您可以使用sed 轻松做到这一点:
sed -n 'm,n p' bigfile > smaller_file
假设 m 和 n 是数字
在这里,您正在使用:
sed的地址,指定ranges by line numbers:Sed 命令可以不带地址,在这种情况下,该命令将对所有输入行执行;使用一个地址,在这种情况下,该命令将仅针对与该地址匹配的输入行执行; 或有两个地址,在这种情况下,将针对与从第一个地址开始到第二个地址的行包含范围相匹配的所有输入行执行该命令。 关于地址范围的三点注意事项: 语法为 addr1,addr2 (即,地址用逗号分隔); addr1 匹配的行将始终被接受,即使 addr2 选择了较早的行;如果 addr2 是一个正则表达式,则不会针对 addr1 匹配的行进行测试。
【讨论】:
如果文件很大,最好在到达end 行后立即退出文件浏览。你可以使用这个 awk:
awk -v m=10 -v n=15 'NR>n{exit} NR>=m' file > file_chunk
【讨论】:
使用head 和tail
head -$start file.txt|tail -$(($end - $start))
【讨论】: