LINUX.ORG.RU

Нужна помощь


0

0

Здравствуйте уважаемые разработчики. Очень нуждаюсь в вашей помощи.

Нужен скрипт написанный на Shell, который бы выводил кол-во неуспешных запросов GET за заданный час.

Вот например нашла такой лог за 21 февраля

127.0.0.1 - - [21/Feb/2009:12:26:23 +0300] "GET /www/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F.php HTTP/1.1" 404 2008 127.0.0.1 - - [21/Feb/2009:12:26:33 +0300] "GET /%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F.php HTTP/1.1" 200 482 127.0.0.1 - - [21/Feb/2009:12:26:33 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:21:16 +0300] "GET /denwer HTTP/1.1" 404 1972 127.0.0.1 - - [21/Feb/2009:15:21:52 +0300] "GET /denwer HTTP/1.1" 404 1972 127.0.0.1 - - [21/Feb/2009:15:22:59 +0300] "GET /denwer/i/hosting-jino.gif HTTP/1.1" 200 1017 127.0.0.1 - - [21/Feb/2009:15:22:58 +0300] "GET /denwer/ HTTP/1.1" 200 18258 127.0.0.1 - - [21/Feb/2009:15:22:59 +0300] "GET /denwer/Tools/dnsearch/search.pl?action=js HTTP/1.1" 200 1521 127.0.0.1 - - [21/Feb/2009:15:22:59 +0300] "GET /favicon.ico HTTP/1.1" 200 318 127.0.0.1 - - [21/Feb/2009:15:23:03 +0300] "GET /denwer HTTP/1.1" 404 1972 127.0.0.1 - - [21/Feb/2009:15:27:51 +0300] "GET / HTTP/1.1" 200 3232 127.0.0.1 - - [21/Feb/2009:15:27:51 +0300] "GET /icons/blank.gif HTTP/1.1" 200 148 127.0.0.1 - - [21/Feb/2009:15:27:51 +0300] "GET /icons/folder.gif HTTP/1.1" 200 225 127.0.0.1 - - [21/Feb/2009:15:27:51 +0300] "GET /icons/text.gif HTTP/1.1" 200 229 127.0.0.1 - - [21/Feb/2009:15:27:51 +0300] "GET /icons/unknown.gif HTTP/1.1" 200 245 127.0.0.1 - - [21/Feb/2009:15:28:12 +0300] "GET /%d0%91%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b0.php HTTP/1.1" 200 484 127.0.0.1 - - [21/Feb/2009:15:28:12 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:28:12 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:28:34 +0300] "GET / HTTP/1.1" 200 172 127.0.0.1 - - [21/Feb/2009:15:33:17 +0300] "GET /%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F.php HTTP/1.1" 200 478 127.0.0.1 - - [21/Feb/2009:15:33:44 +0300] "GET /%d0%98%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f/ HTTP/1.1" 200 1700 127.0.0.1 - - [21/Feb/2009:15:33:44 +0300] "GET /icons/back.gif HTTP/1.1" 200 216 127.0.0.1 - - [21/Feb/2009:15:33:44 +0300] "GET /icons/image2.gif HTTP/1.1" 200 309 127.0.0.1 - - [21/Feb/2009:15:36:48 +0300] "GET /%d0%93%d0%bb%d0%b0%d0%b2%d0%bd%d0%b0%d1%8f.php HTTP/1.1" 200 478 127.0.0.1 - - [21/Feb/2009:15:36:48 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:36:48 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:36:51 +0300] "GET /Registration.txt HTTP/1.1" 200 - 127.0.0.1 - - [21/Feb/2009:15:36:55 +0300] "GET /%d0%a0%d0%b5%d0%b3%d0%b8%d1%81%d1%82%d1%80%d0%b0%d1%86%d0%b8%d1%8f.php HTTP/1.1" 200 486 127.0.0.1 - - [21/Feb/2009:15:36:55 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:36:55 +0300] "GET /denwer/errors/phperror_js.php HTTP/1.1" 200 3122 127.0.0.1 - - [21/Feb/2009:15:37:24 +0300] "GET / HTTP/1.1" 200 148 127.0.0.1 - - [21/Feb/2009:15:37:24 +0300] "GET /denwer/i/hosting-jino.gif HTTP/1.1" 304 - 127.0.0.1 - - [21/Feb/2009:15:37:24 +0300] "GET /denwer/ HTTP/1.1" 200 18258 127.0.0.1 - - [21/Feb/2009:15:37:24 +0300] "GET /denwer/Tools/dnsearch/search.pl?action=js HTTP/1.1" 200 1521 127.0.0.1 - - [21/Feb/2009:15:39:00 +0300] "GET /cgi/ HTTP/1.1" 403 2751 127.0.0.1 - - [21/Feb/2009:15:40:09 +0300] "GET /cgi/ HTTP/1.1" 403 2751 127.0.0.1 - - [21/Feb/2009:15:42:29 +0300] "GET /cgi/ HTTP/1.1" 403 2751 127.0.0.1 - - [21/Feb/2009:15:42:49 +0300] "GET /cgi/test HTTP/1.1" 404 1972

Подойдёт ли он?

И так же, в скрипте имя файла лога должно задаваться первым аргументом командной строки а час вторым аргументом. Если скрипт запущен без аргументов, он должен выводить свой синтаксис Если задан невалидный час, скрипт должен ругаться на это и выводить синтаксис. Если не удаётся открыть лог, скрипт должен сообщать об ошибке.

Вот собственно надо реализовать.


>Подойдёт ли он?

При данном форматировании явно не подойдет.

>Вот собственно надо реализовать.

Ну собственно и делайте.
Создаете файл, ставите ему исполняемый атрибут,
первой строкой в нем пишите "#/bin/bash", а дальше начитаете писать скрипт.

Допустим так:

if [ -z "$1" -o -z "$2" ] ; then
echo "Нужно два аргумента"
exit 1
fi

mky ★★★★★
()

Дык этыть...

DATE=`date +%d/%b/%Y:%H: -d "2007-12-13 16:53"`
# получить часы в формате данного лога
# и поместить в переменную date

awk '{ print $4 " " $9 }'
# выдернуть поля за нумером 4 (дата) и 9 (ответ веб-сервера)

grep $DATE
# получить строки, содержащие $DATE

grep [45][0-9][0-9]\$
# получить строки, кончающиеся на 4хх или 5хх (это, собственно, ошибки)

wc -l
# сосчитать строки

Всё вместе: опа, почти готовый скрипт

#################
DATE=`date +%d/%b/%Y:%H: -d "$2"`
awk '{ print $4 " " $9 }' <$1 | grep $DATE | grep [45][0-9][0-9]\$ | wc -l
#################

P.S. Есть режим user line breaks -- лучше использовать его для таких сообщений, чтобы форматирование не сбивалось.

И в теме тоже стоит писать что-нибудь осмысленное... Помощь-то, она много кому нужна.

lodin ★★★★
()

Это наверное задание на собеседовании?

eXOR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.