如何优化以下shell命令以快速获得输出?

时间:2018-08-29 04:02:08

标签: shell unix scripting

我需要检查日志中特定ID的计数,在Unix服务器中最近24小时。现在,我正在使用以下命令

find -type f -newermt "aug 27, 2018 02:30" ! -newermt "aug 28, 2018 02:30" ! -exec grep -r 'commandType\": \"PATTERN' {} \;|wc -l

由于日志中的数据非常庞大,因此上述命令需要1个小时以上的时间才能提供输出。无论如何,有没有优化上面的命令以快速获得真实输出的信息?

1 个答案:

答案 0 :(得分:1)

好吧,第一要做的是找出时间在哪里度过。是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可能无关紧要,因为您无论如何都只在处理文件-无需递归。