首页 > 解决方案 > 如何优化以下 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 个多小时才能给出输出。无论如何优化上述命令以快速获得输出?

标签: shellunixscripting

解决方案


嗯,首先要做的是找出时间都花在了哪里。是find还是grep。您可以通过运行来确定成本find

time find -type f -newermt "aug 27, 2018 02:30" ! -newermt "aug 28, 2018 02:30" -exec true \;

那么,如果它一直在grep占用,有两种可能性:

  1. 批量files使用以在更大的文件组上xargs运行单个。grep这通常仅在存在大量文件时才有帮助可能是也可能不是。
  2. 找出如何优化您正在搜索的模式。我在这里假设您提供的模式是通用的,因此除非我们确切知道它是什么,否则我们无法真正提供帮助。一种可能性(如果您的 ID 是固定字符串)是使用grep -F,而不是grep因为它可能针对该用例进行了优化。哦,顺便说一句,这-r可能是无关紧要的,因为你只是在处理文件——不需要递归。

推荐阅读