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

时间:2012-02-10 21:05:29

标签: bash shell

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

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

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

5 个答案:

答案 0 :(得分:24)

使用awk

这样的行号很容易
awk 'NR >= 23 && NR <= 56'

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

sed '23,56!d'

或者对于模式,

sed '/start/,/end/!d'

答案 1 :(得分:6)

我会选择sed,但也可以使用头/尾组合: <击>

<击>
head -n 56 file | tail -n $((56-23)) 

<击>

嗯 - 我很确定里面有一个错误的错误。我会找到它。 :)

更新

哈哈 - 知道你的错误,我发现了:

head -n 56 file | tail -n $((56-23+1)) 

答案 2 :(得分:5)

Sed可以做到这一点:

$ sed -n 23,56p yourfile

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

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

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

答案 3 :(得分:3)

使用sed。这应该做到这一点。

   sed -n '23,56p' > out.txt

答案 4 :(得分:0)

这可能对您有用:

sed '1,22d;56q' file

或者这个:

sed '23,56!d;56q' file

或者这个:

awk 'NR>56{exit};NR==23,NR==56' file