Команда Unix для определения временного диапазона

19078
gaurav

У меня есть файл журнала, сохраненный с определенной датой. Я хочу получить записи журнала в определенный период времени и даты в другой файл.

Пример: все записи с 2014-12-04 00:00:00 до 2014-12-04 17:00:00

1

3 ответа на вопрос

2
Daniel Goldfarb

Попробуйте egrep:

pttrn="2014-12-04 0[0-9]" pttrn="$|2014-12-04 1[0-6]" pttrn="$|2014-12-04 17:00:00"  egrep "$" <logfile> 

Шаблон egrep состоит из трех частей. Первая часть захватывает все с 00:00:00 до 09:59:59. Вторая часть захватывает все с 10:00:00 до 16:59:59, а третья часть захватывает 17:00:00.

Ваш первый `egrep` удаляет значения, начинающиеся с` 08` или `09` (т. Е. Времена между` 08: 00` и ​​`09: 59`), а второй допускает` 17: 10`, `17: 20` , `17: 30` и т. Д. ..., чтобы пройти. G-Man 9 лет назад 0
@ G-Man Спасибо. Ты прав. Я думаю, что я исправил это сейчас. Daniel Goldfarb 9 лет назад 0
Похоже, это должно работать. Его можно упростить до `egrep" 2014-12-04 (0 [0-9] | 1 [0-6] | 17: 00: 00) "`. G-Man 9 лет назад 0
0
vembutech

Если вы хотите 4-минутный интервал журналов,

grep "01/APR/2014:16:3[5-9]" logfile 

вернет все строки журнала между 16:35 и 16:39 01 апреля 2014 года.

Предположим, что вам нужны последние 5 дней, начиная с 17 сентября 2014 года, вы можете использовать следующее:

grep "1[3-7]/Sep/2011" logfile 

Надеется, что это помогает,

0
wurtel

Вы можете выбрать начальную и конечную строки, например sed:

sed -n '/Dec 5 11:00/,/Dec 5 12:00/p' /var/log/daemon.log 

Это напечатает все строки от первой строки Dec 5 11:00до (и включая) первую строку с Dec 5 12:00. Это предполагает, что журнал является последовательным по времени (т.е. все строки расположены в порядке времени). -nЯвляется подавление действия по умолчанию печати каждой строки.

Но это предполагает, что есть записи для `Dec 5 11: 00` и` Dec 5 12: 00`, не так ли? Если за `Dec 5 10: 59` сразу же следует` Dec 5 11: 01`, то `sed` не будет знать, с чего начать. И если есть `Dec 5 11: 00`, но после` Dec 5 11: 59` следует `Dec 5 12: 01`,` sed` не будет знать, где остановиться. G-Man 9 лет назад 0
Правда; Вы могли бы пропустить часть `: 00`, но опять же должна быть хотя бы одна строка журнала в час. Лично я бы адаптировал скрипт под данные; возможно, даже применить некоторые Perl Foo. wurtel 9 лет назад 1

Похожие вопросы