Я пишу приложение для анализа и хотел получить записи журнала Apache между двумя определенными датами. Предположим, что дата составлена так: 22 декабря 2009 года: 00:19 (день / месяц / год: час: минута)
В настоящее время я использую регулярное выражение для замены названия месяца его числовым значением, удаления разделителей, поэтому приведенная выше дата преобразуется в: 221220090019
, что делает сравнение даты тривиальным .. но ..
Выполнение регулярного выражения для каждой записи для больших файлов, скажем, одного, содержащего четверть миллиона записей, является чрезвычайно дорогостоящим ... Есть ли другой метод, не связанный с заменой регулярного выражения?
Заранее спасибо
Редактировать: вот функция преобразования / сравнения
function dateInRange(t, from, to) {
sub(/[[]/, "", t);
split(t, a, "[/:]");
match("JanFebMarAprMayJunJulAugSepOctNovDec", a[2]);
a[2] = sprintf("%02d", (RSTART + 2) / 3);
s = a[3] a[2] a[1] a[4] a[5];
return s >= from && s <= to;
}
«от» и «до» - интервалы в вышеупомянутом формате, а «t» - необработанное поле даты / времени в журнале apache (например, [22 / Dec / 2009: 00: 19: 36)