首页 > 解决方案 > 处理通过文件的多个部分读取多个模式的最有效方法是什么?

问题描述

我有一个 bash 脚本,它读取日志文件并在文件的各个部分搜索各种模式。我正在尝试考虑优化此流程的最佳方法,并且我目前已将其设置为在搜索文件时,它只会搜索所需的区域(最后 15 分钟的日志记录,前 15 分钟的日志记录,最后小时、最后 30 分钟等)。

可以想象,随着文件大小的增加,搜索也会增加。大多数 grepfgreps用于-m / -c优化它们并用于sed分割文件以及特殊重定向,并且tac在某些情况下从文件的底部向上而不是从顶部到底部读取以最大限度地提高效率。我没有实现的主要事情是LC_ALL=C在我们的 grep 之前使用,但不管怎样,我仍在寻找最佳实践和最佳性能提升。

FILENAME="filename" #Can be large large file 10s of GB
search1 = $(<$FILENAME tac | sed "/thirty_mins_ago/q" | fgrep -c -m 1 "FATAL")
search2 = $(<$FILENAME tac | sed "/fifteen_mins_ago/q" | fgrep -c -m 1 "Exception")
search3 = $(<$FILENAME cat | sed "/start_of_day_fifteen/q" | fgrep -c -m "Maintenance complete")

if [ $search1 -ge 1 ];
echo "FATAL ERRORS DETECTED"
fi
etc

将整个文件存储在变量中会导致 grep 的读取时间更快,还是会将文件拆分为与时间块相对应的多个变量,然后对这些变量进行 grep 处理会显着提高性能?

非常感谢任何有关优化和提高效率的最佳方法的建议。

标签: linuxbash

解决方案


推荐阅读