Вы должны смотреть на каждую строку в нужном диапазоне (чтобы определить, находится ли он в нужном диапазоне), поэтому я предполагаю, что вы имеете в виду не каждую строку в файле. Как минимум, вам придется просматривать каждую строку в файле вплоть до первой строки за пределами вашего диапазона (я предполагаю, что строки расположены в порядке даты / времени).
Это довольно простой шаблон:
state = preprint
for every line in file:
if line.date >= startdate:
state = print
if line.date > enddate:
exit for loop
if state == print:
print line
Вы можете написать это на awk, Perl, Python, даже на COBOL, если нужно, но логика всегда одинакова.
Сначала нужно найти номера строк (например, с помощью grep), а затем просто слепо распечатать этот диапазон строк, поскольку grep также должен просмотреть все строки ( все из них, а не только вверх). к первому за пределами диапазона и, скорее всего, дважды , один для первой строки и один для последней).
Если это то, что вы собираетесь делать довольно часто, вы можете подумать о переносе усилия с «каждый раз, когда вы делаете это», на «один раз, когда файл стабилизируется». Примером может быть загрузка строк файла журнала в базу данных, проиндексированную по дате / времени.
Это займет некоторое время, чтобы настроить, но ваши запросы станут намного быстрее. Я не обязательно защищаю базу данных - вы могли бы достичь того же эффекта, разбив файлы журналов на почасовые журналы следующим образом:
2009/
01/
01/
0000.log
0100.log
: :
2300.log
02/
: :
Тогда в течение определенного времени вы точно знаете, с чего начать и перестать смотреть. Диапазон от 2009/01/01-15:22
до 2009/01/05-09:07
приведет к:
- некоторый (последний бит) файла
2009/01/01/1500.txt
.
- все файлы
2009/01/01/1[6-9]*.txt
.
- все файлы
2009/01/01/2*.txt
.
- все файлы
2009/01/0[2-4]/*.txt
.
- все файлы
2009/01/05/0[0-8]*.txt
.
- некоторый (первый бит) файла
2009/01/05/0900.txt
.
Конечно, я бы написал скрипт для возврата этих строк вместо того, чтобы пытаться делать это каждый раз вручную.