【发布时间】:2018-08-12 03:19:46
【问题描述】:
我正在尝试通过 grep 字符串在 2 个不同模式之间解析大型日志文件
示例:
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/python 的解决方案都比
sed更快。如果输入全是 ASCII,你可以使用LC_ALL=C sed -n '/pattern1/,/pattern2/p'来加快速度......另请参阅 @987654321 @如果你不希望输出中的开始/结束行 -
你可以测试一下这是否会快一点:
sed -n '/^pattern1$/,/^pattern2$/p -
如果真正的模式是静态字符串,使用
$0 == "pattern1"的 awk 可能会比sed -n '/^pattern1$/更快,但从总体上看,I/O 缓冲开销将大大超过和隐藏任何代码性能差异。 -
我尝试了 Sundeep 和 Cyrus 的建议,没有观察到明显的加速。
-
@Sundeep 您提供的链接确实有帮助,谢谢!