Вы должны посмотреть каждую строку в нужном вам диапазоне (указать, находится ли она в нужном вам диапазоне), поэтому я предполагаю, что вы имеете в виду не каждую строку в файле. На минимальном уровне вам нужно будет посмотреть каждую строку в файле вплоть до первого за пределами вашего диапазона (я предполагаю, что строки указаны в порядке даты/времени).
Это довольно простая схема:
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
.
Конечно, я бы написал сценарий, чтобы возвращать эти строки, а не пытаться делать это вручную каждый раз.
Когда вы говорите, «с помощью Баш,» вы имеете в виду, что такие инструменты, как Grep не допускаются, или вы имеете в виду более общий Баш сценариев среды, в которой Grep отсчитывает тоже? – JasonSmith
Возможно, вам следует изменить заголовок вопроса, чтобы отразить использование bash? –
Использование grep было бы здорово. Однако файлы очень большие, поэтому сравнение временных меток каждой строки не будет оптимальным. – Brent