Perl подсчитывает записи журнала в секунду, используя хэш массивов
Вопрос
Обновлено:
После моего первоначального сообщения и ответов мне удалось сделать еще один взлом, и мои цели и результаты были изложены немного яснее:
Цель:
Я пытаюсь подсчитать количество совпадений в строке поиска файла журнала, чтобы выяснить, сколько вхождений сообщения генерируется следующими способами:
- Всего за день.
- Всего за час.
- Максимальное значение за минуту, за час.
- Наибольшее значение в секунду, в час.
Мой рабочий код:
родовое словоРезультаты
Мне пришлось отключить строгий режим (чего мне стыдно) из-за моих плохих методов разыменования хэша.
родовое словоПопытка вывода:
родовое словоВопросы:
- Есть ли лучший способ написать код и включить строгий режим?
- Как мне составить список наивысшего вхождения хеш-значения в хеш-коде, пытаясь указать только самое большое число?
Спасибо за все предыдущие сообщения, без них я бы не продвинулся так далеко.
С уважением,
Энди
Решение
Его можно несколько упростить (я также внес некоторые стилистические изменения, чтобы улучшить читаемость):
родовое словоРабочая часть цикла, которая является центральной для вашего запроса, следующая:
родовое словоВот тот же код с добавленными комментариями, поясняющими, почему я внес стилистические изменения:
родовое словоДругие советы
Вам следует рассмотреть возможность использования модуля для анализа временных меток, например DateTime :: Format :: Strptime .
родовое словоЕсли бы вы сделали что-то вроде:
родовое словоВы можете сохранить все данные из меток времени в объектах DateTime и использовать их позже по мере необходимости.
Возникла проблема с регулярным выражением для получения даты. Поскольку дата содержит символ - вы не можете получить всю дату с помощью \ d + Вместо этого вы должны использовать \ S +, чтобы получить всю дату. Я пробую ваш код сейчас ... буду обновлять дополнительную информацию
<цитата>Обновление 1
Я предполагаю, что вы хотите получить количество за день и за час. Поэтому немного изменили логику
родовое слово