linux - 处理通过文件的多个部分读取多个模式的最有效方法是什么?
问题描述
我有一个 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 处理会显着提高性能?
非常感谢任何有关优化和提高效率的最佳方法的建议。
解决方案
推荐阅读
- php - codeigniter 调用库函数停止 foreach 循环
- apache-spark - 异常 java.util.NoSuchElementException: None.get in Spark Dataset save() operation
- ssl - 阻止 IIS 为其他 localhost 网站使用 SSL 证书
- tsql - 插入时聚集的列存储索引性能不佳
- javascript - Javascript 中 filter() 后无法获取值
- reactjs - 通过滚动到预定义的组件/节点来触发动画
- html - 本地主机不显示 img 但 index.html 显示
- javascript - 多个雷达图 MDB 未显示
- c# - C# WinForms 无模式对话框关闭
- raspberry-pi - 树莓派 openvpn:错误:无法打开 TUN/TAP