我有一个大约30.000.000行(Radius Accounting)的文件,我需要从下到上找到一些模式,因为我需要最后的结果。
命令:
tac accounting.log | grep $pattern
给出我需要的东西,但它太慢了,因为起初操作系统必须读取整个文件然后发送到管道。
所以,我需要快速的东西,从最后一行读取文件到第一行。
谢谢,对不起我的英语。
答案 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循环中断。