Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие языки > Отобразить строки файла между двумя условиями BASH


Автор: deber 23.11.2011, 13:34
Нужен скрипт в одну строчку.

Есть лог-файл и два условия (даты)
Необходимо вывести данные, попадающие между условиями.

Например лог такой:
Код

2011 Nov 23 07:13:00
2011 Nov 23 07:15:00
2011 Nov 23 07:17:00
2011 Nov 23 07:19:00
2011 Nov 23 07:21:00


Условия например такие:
Вывести с 2011 Nov 23 07:15:00 по 2011 Nov 23 07:19:00

Вывод получится такой:
Код

2011 Nov 23 07:15:00
2011 Nov 23 07:17:00
2011 Nov 23 07:19:00



Самое простое, что приходит в голову:
Код

cat logfile | grep -A 99999 "2011 Nov 23 07:15" | grep -B 99999 "2011 Nov 23 07:19"


Но, согласитесь, это как-то коряво.
Да и не в корявости вопрос, "2011 Nov 23 07:15" может и не быть в лог-файле. А будет например 2011 Nov 23 07:16.
Так же может ведь и не встретиться совпадение с "2011 Nov 23 07:19"

Как решить данную проблему оптимальным способом?

Автор: Lipetsk 24.11.2011, 07:18
не знаю всех возможностей grep, но тогда вам нужно вырезать "2011 Nov 23 " (это возможно), а из оставшихся выбрать по времени, используя условия ">=" и "<="

Автор: vrabey 17.6.2012, 15:14
 cat logfile

 2011 Nov 23 07:13:00
 2011 Nov 23 07:16:00
 2011 Nov 23 07:17:00
 2011 Nov 23 07:19:00
 2011 Nov 23 07:21:00
 2011 Nov 23 07:23:00
#---------------------------------------
для конкретного случая

grep '2011 Nov 23 07:1[4-9]' logfile 
или
sed -n '/2011 Nov 23 07:1[5-9]/p' logfile 

 2011 Nov 23 07:16:00
 2011 Nov 23 07:17:00
 2011 Nov 23 07:19:00
#----------------------------------------
но если попытаться включить "07:21:00" то 
 grep '2011 Nov 23 07:[15-19]' logfile   - не работает:
 
 grep: Неверный конец диапазона
#----------------------------------------
 тогда можно вот так:
 sed -n '/2011 Nov 23 07:1[5-9]/,/2011 Nov 23 07:2[0-2]/p' logfile 
  
 2011 Nov 23 07:16:00
 2011 Nov 23 07:17:00
 2011 Nov 23 07:19:00
 2011 Nov 23 07:21:00

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)