读取由行号指定的两行之间的行

Mec*_*ash 15 bash shell

我如何阅读两条特定线之间的所有线?

让我们说第23行是我要开始的地方,而第56行是要读取的最后一行,但它不是文件的结尾.

我如何阅读23至56行?我将把它们输出到另一个文件.

Kev*_*vin 26

通过这样的行号非常容易awk:

awk 'NR >= 23 && NR <= 56'
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,sed都会让它变得有趣.

sed '23,56!d'
Run Code Online (Sandbox Code Playgroud)

或者对于一个模式,

sed '/start/,/end/!d'
Run Code Online (Sandbox Code Playgroud)


Ole*_*eev 6

Sed可以这样做:

$ sed -n 23,56p yourfile

编辑:正如评论者指出,在间隔的最后一行之后进行sed停止处理将使sed的执行速度与头尾组合一样快.因此获得线路的最佳方式是

$ sed -n '23,56p;57q' yourfile

但性能将在很大程度上取决于您正在处理的文件,间隔和许多其他因素.因此,如果您正在开发一些脚本以便在已知数据测试中频繁运行,那么答案中提到的所有三种方法(sed,awk,head-tail)都是个好主意.

  • 好吧,sed比`head`-`tail`组合(单个进程)具有更好的性能,特别是如果你这样做:`sed -n '23,56p; 57q'FILE`. (3认同)

use*_*own 6

我会选择sed,但头尾​​组合也是可能的:

head -n 56 file | tail -n $((56-23)) 
Run Code Online (Sandbox Code Playgroud)

好吧 - 我很确定里面有一个错误的错误.我要找到它.:)

更新:

哈哈 - 知道你的错误,我找到了:

head -n 56 file | tail -n $((56-23+1)) 
Run Code Online (Sandbox Code Playgroud)