Grep down to up up tac

时间:2014-02-02 15:20:40

标签: shell grep reverse cat tail

我有一个大约30.000.000行(Radius Accounting)的文件,我需要从下到上找到一些模式,因为我需要最后的结果。

命令:

tac accounting.log | grep $pattern

给出我需要的东西,但它太慢了,因为起初操作系统必须读取整个文件然后发送到管道。

所以,我需要快速的东西,从最后一行读取文件到第一行。

谢谢,对不起我的英语。

2 个答案:

答案 0 :(得分:1)

您可以使用tac代替tail -r

例如,使用此命令向后读取最后100行并使用grep:

查找模式
tail -n 100 -r accounting.log | grep "$pattern"

答案 1 :(得分:1)

@ anubhava的回答很棒,如果你知道模式将在最后的X行中,你可以使用tail -n X。但是,如果你不知道X值,你有几个选择。

1)不要试图修改tac命令,而是修改grep命令以仅匹配第一个(这节省了计算时间,因为grep不必处理整个文件)。

tac accounting.log | grep -m 1 $pattern

2)编写一个for循环,逐行处理文件,然后在找到所需内容后从for循环中断。

相关问题