Выберите интервалы времени из файлов журнала, используя Bash - PullRequest
1 голос
/ 24 августа 2010

Мне нужно извлечь некоторую информацию из файла журнала, используя скрипт оболочки (bash).Строка из файла журнала обычно выглядит следующим образом:

2009-10-02 15:41:13,796| some information

Иногда за такой строкой следует еще несколько строк, содержащих подробности о событии.Эти дополнительные строки не имеют определенного формата (в частности, они не начинаются с отметки времени).

Я знаю, как использовать grep для фильтрации файла на основе ключевых слов и выражений.В основном у меня проблемы с тем, что иногда мне нужно смотреть только через определенные промежутки времени.Например, мне нужно смотреть только на события, которые произошли за последние X минут.У меня нет опыта работы со сценариями оболочки, но из-за сложности формата времени это кажется довольно сложной задачей для меня.С другой стороны, я могу себе представить, что это что-то не слишком необычное, поэтому мне интересно, есть ли какие-нибудь инструменты, которые могут облегчить мне это, или вы можете дать мне несколько советов, как решить эту проблему?

Ответы [ 3 ]

1 голос
/ 25 августа 2010

В основном у меня проблемы с тем, что иногда мне нужно искать только через определенные промежутки времени.

Вы можете использовать date для преобразования подписи даты для вас с параметром %s:

%s     seconds since 1970-01-01 00:00:00 UTC

С его помощью мы можем сделать небольшую демонстрацию:

#!/bin/bash

timespan_seconds=300 # 5 minutes

time_specified=$(date +"%s" -d "2010-08-25 14:54:40")

let time_now=$(date +"%s")
let time_diff=($time_now - $timespan_seconds) 

if [ $time_specified -ge $time_diff ]; then
        echo "Time is within range"
fi

Обратите внимание, что это не относится к будущему времени.

1 голос
/ 24 августа 2010
gawk -F"[-: ]" 'BEGIN{
  fivemin = 60 * 60 * 5   #last 5 min
  now=systime()
  difference=now - fivemin
}
/^20/{
  yr=$1
  mth=$2
  day=$3
  hr=$4
  min=$5
  sec=$5
  t1=mktime(yr" "mth" "day" "hr" "min" "sec)
  if ( t1 >= difference) {
   print
  }
}' file
0 голосов
/ 24 августа 2010

Возможно, вы захотите взглянуть на мою программу на Python , которая извлекает данные из файлов журналов в зависимости от времени.Спецификация дат еще не реализована (она рассчитана примерно на последние 24 часа).Ожидаемый формат времени (например, 14 января 04:10:13) выглядит немного иначе, чем вы хотите, но его можно адаптировать.Я не тестировал его с линиями без меток времени, но он должен печатать все в указанном диапазоне времени.

Это даст вам некоторую информацию об использовании:

timegrep.py --help 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...