在LARGE日志文件中有效地grep两个模式之间的字符串

问题描述 投票:0回答:2

我试图通过两个不同模式之间的grep字符串来解析大型日志文件

例如:

line1
line2
...
lineN
pattern1
line4
line6
pattern2
....
other lines
pattern1
line8
line9
pattern2
...

我需要捕捉的线是pattern1 / pattern2之间的部分(所以,line4通过line6line8通过line9)。

我在用

sed -n '/pattern1/,/pattern2/p

搜索文件,但需要很长时间才能完成(是的,我的日志文件很大...)

我想知道是否有更有效的方法来加快搜索速度?理想情况下是单行命令(awk / grep等...)或Python。

python awk sed grep
2个回答
0
投票

你可以试试:

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

0
投票

如果使用Python,可以试试这个:

m = re.search(r'(?<=pattern1)(.|\s)*?(?=pattern2)', log_file, re.MULTILINE)
© www.soinside.com 2019 - 2024. All rights reserved.