在LARGE日志文件中有效地grep两个模式之间的字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在LARGE日志文件中有效地grep两个模式之间的字符串相关的知识,希望对你有一定的参考价值。
我试图通过两个不同模式之间的grep字符串来解析大型日志文件
例如:
line1
line2
...
lineN
pattern1
line4
line6
pattern2
....
other lines
pattern1
line8
line9
pattern2
...
我需要捕捉的线是pattern1 / pattern2之间的部分(所以,line4
通过line6
和line8
通过line9
)。
我在用
sed -n '/pattern1/,/pattern2/p
搜索文件,但需要很长时间才能完成(是的,我的日志文件很大...)
我想知道是否有更有效的方法来加快搜索速度?理想情况下是单行命令(awk / grep等...)或Python。
答案
你可以试试:
awk '/pattern1/,/pattern2/'
根据我的经验,mawk
可以比sed
明显快于这种操作并且通常是最快的。或者gawk4
可以比gawk3
快得多,所以你也可以试试。
- 编辑 -
FWIW,只对一个有400万行的文件进行了一次小测试
在MacOS 10.13上:
sed : 1.62 real 1.61 user 0.00 sys
gsed : 1.31 real 1.30 user 0.00 sys
awk : 2.14 real 2.12 user 0.00 sys
gawk3: 5.05 real 3.90 user 1.13 sys
gawk4: 0.61 real 0.60 user 0.00 sys
mawk : 0.42 real 0.40 user 0.00 sys
在Centos 7.4上:
gsed : 1.56 real 1.54 user 0.01 sys
gawk4: 1.31 real 1.29 user 0.01 sys
mawk : 0.56 real 0.54 user 0.01 sys
另一答案
如果使用Python,可以试试这个:
m = re.search(r'(?<=pattern1)(.|\s)*?(?=pattern2)', log_file, re.MULTILINE)
以上是关于在LARGE日志文件中有效地grep两个模式之间的字符串的主要内容,如果未能解决你的问题,请参考以下文章