Как оптимизировать следующую команду оболочки, чтобы получить вывод очень быстро? - PullRequest
0 голосов
/ 29 августа 2018

Мне нужно проверить количество определенных идентификаторов в журналах за последние 24 часа на сервере Unix. Прямо сейчас я использую следующую команду

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 голосов
/ 29 августа 2018

Ну, первое, что нужно сделать , это выяснить, где тратится время. Это 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. Узнайте, как оптимизировать шаблон, который вы ищете. Я предполагаю, что шаблон, который вы предоставили, является общим, поэтому мы не сможем помочь с этим, если не будем точно знать, что это такое. Одна из возможностей (если ваш идентификатор является фиксированной строкой) - использовать grep -F вместо grep, так как он может быть оптимизирован для этого варианта использования. Да, и, кстати, -r, вероятно, не имеет значения, так как вы все равно обрабатываете файлы - нет необходимости повторять.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...