我有一个包含很多行的文件,我需要最后第 n 行(特别是从底部算起的第 95 行)。我该如何继续这样做呢?一种方法是使用 tail,但它会打印从最后一个到最后 95 个的所有内容,而我只需要第 95 个。
答案1
正如您所指出的,您可以用来tail
从文件中获取最后 95 行。您只需要其中的第一个,为此有一个名为 的实用程序head
。所以
tail -95 file | head -1
使用tail
可能是你能做的最好的事情。
另一种方法是将行读入行数组,并在到达文件末尾时打印出 n-95 行。您实际上不需要存储所有行,因此您可以拥有一个包含 95 个元素的循环缓冲区来存储您读取的最后 95 行。
答案2
@icarus 的回答可以解决这个问题,但只是添加另一个选项:
tac file | sed -n 95p
tac
将反向打印文件,并sed -n 95p
打印第 95 行。由于文件是反向打印的,因此将显示从底部算起的第 95 行。
更新
正如@icarus 在评论中提到的:
缺点是整个文件都通过管道传递,而不仅仅是 95 行。告诉 sed 在打印第 95 行后显式退出将消除这个缺点。
因此,这是一个更新后的命令,该命令在打印第 95 行后退出:
tac file | sed -n '95{p; q}'