Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: программа на Shell  (Прочитано 869 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Dev4enka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
программа на Shell
« : 21 Апреля 2011, 15:19:17 »
Помогите, пожалуйста, новичку. Знаю, что вроде бы программа легкая, но не представляю как сделать. Заранее очень благодарна.
Shell-программа обрабатывает текстовый файл формата:
YYYY-MM-DD service message # дата, имя службы, сообщение
2010-09-09 kernel system restarted
2010-10-10 security пользователь admin вошел в систему с хоста 192.168.0.10
и выводит все сообщения от указанной службы в заданный промежуток времени.

Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: программа на Shell
« Ответ #1 : 21 Апреля 2011, 16:10:35 »
Для начала
cat file | grep "2010-10-10"

Оффлайн Мангуст

  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: программа на Shell
« Ответ #2 : 21 Апреля 2011, 17:12:39 »
Если в таком формате и начиная с произвольной даты до другой произвольной даты - то вот набросок:

#!/bin/sh

startdate=2010-09-09
enddate=2010-12-31
service=kernel
log=./mylog

mydate=$startdate
enddate=`date --date "$enddate 1day" +%Y-%m-%d` # add 1 day (inclusive)

while [ "$mydate" != "$enddate" ]; do
    grep "$mydate $service" < $log
    mydate=`date --date "$mydate 1day" +%Y-%m-%d` # add 1 day
done

Если точно известно (можно проверять с помощью grep -q), что начальная и конечная даты есть в журнале, и что даты идут по порядку, то можно проще:

cat $log | sed -ne "/^$startdate/,/^$enddate/p" | grep "^[0-9 -]*$service"

PS Впрочем в последнем варианте, только первая строка с $enddate попадет на вход grep. Если же увеличить день на единицу, то надо как-то отработать вариант, что может попасть одна лишняя строка из следующего дня.
« Последнее редактирование: 22 Апреля 2011, 08:09:28 от Мангуст »

 

Страница сгенерирована за 0.053 секунд. Запросов: 25.