从文件中获取倒数第 n 行

从文件中获取倒数第 n 行

我有一个包含很多行的文件,我需要最后第 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}'

相关内容