shell - 如何优化以下 shell 命令以快速获得输出?
问题描述
我需要在 Unix 服务器的最后 24 小时内检查日志中特定 ID 的计数。现在,我正在使用以下命令
find -type f -newermt "aug 27, 2018 02:30" ! -newermt "aug 28, 2018 02:30" ! -exec grep -r 'commandType\": \"PATTERN' {} \;|wc -l
由于日志中的数据量很大,因此上述命令需要 1 个多小时才能给出输出。无论如何优化上述命令以快速获得输出?
解决方案
嗯,首先要做的是找出时间都花在了哪里。是find
还是grep
。您可以通过运行来确定成本find
:
time find -type f -newermt "aug 27, 2018 02:30" ! -newermt "aug 28, 2018 02:30" -exec true \;
那么,如果它一直在grep
占用,有两种可能性:
- 批量
files
使用以在更大的文件组上xargs
运行单个。grep
这通常仅在存在大量文件时才有帮助,可能是也可能不是。 - 找出如何优化您正在搜索的模式。我在这里假设您提供的模式是通用的,因此除非我们确切知道它是什么,否则我们无法真正提供帮助。一种可能性(如果您的 ID 是固定字符串)是使用
grep -F
,而不是grep
因为它可能针对该用例进行了优化。哦,顺便说一句,这-r
可能是无关紧要的,因为你只是在处理文件——不需要递归。
推荐阅读
- java - 如何使用 Springboot 和 Hibernate 在 DTO 和 Aggentity 类中映射 Postgres JSON 数据类型
- c++ - Aerospike 没有回应
- python - 日本填字游戏的机器学习错误预测
- python - 如何调试我的 Django 模型以查看属性包含的内容?
- javascript - 使用 Angular 7、8、9 将 PDF 文件渲染为画布
- sql - 如何在雪花中将滑动窗口框架设置为 1 个跟随和无界跟随之间的范围
- python - 使用变压器块 keras 进行自我注意
- amazon-web-services - DynamoDb begin_with Swift 5 问题
- wordpress - wordpress 和脚本标签中的 in_category 方法 - AdjacentHTML
- python-3.x - 我想将对象转换为整数或浮点数,我从一天开始就在尝试,但我找不到解决方案,请告诉我答案