Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в последних 15 строчках txt файла

Ответить
Настройки темы
CMD/BAT - [решено] Поиск в последних 15 строчках txt файла

Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день. Пишу небольшой мониторинг лог файлов. Нужна ваша помощь. Подскажите, как осуществить задумку.

Необходимо в последних 15 строчках *.txt файлов, искать определенные слова. Если в последних 15 строчках хоть одного из текстовых файлов нет ни одного из заданных слов, то выдавать сообщение "Тревога"

Заранее благодарен.

Отправлено: 18:33, 28-11-2011

 

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Изначально немного не так реализовал, как вы просили - всего на один файл. Теперь переделал на все файлы с нужным расширением в заданной директории.
Замените Word1-Word4 на нужные вам слова, ну и директорию с логами укажите.
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

Set LogDir=logs
Set LogExt=txt
Set NOfLastStrings=15

:: Получаем список логов
Set TAlert=false
For /F "tokens=*" %%F In ('Dir "%LogDir%\*.%LogExt%" /B /A-D') Do (
Set LogFile=%LogDir%\%%F
Call :Check
)
:: Действия, если не найдено ни одного из слов во всех логах
If %TAlert%==true (
Echo.
Echo       ALERT  
)
Pause
Exit

:Check
:: Получаем общее количество строк
Set s=0
For /F %%A In (%LogFile%) Do (Set /A s+=1)

:: Убираем начальные строки, оставляем только заданное количество в конце
:: Ищем в строках заданные слова, если не нашлось ни одного - сообщаем
Set /A s-=NOfLastStrings
Set Alert=true
For /F "tokens=* skip=%s%" %%A In (%LogFile%) Do (
Echo %%A|Find "Word1">nul&&Set Alert=false
Echo %%A|Find "Word2">nul&&Set Alert=false
Echo %%A|Find "Word3">nul&&Set Alert=false
Echo %%A|Find "Word4">nul&&Set Alert=false
)

:: Действия, если не найдено ни одного из слов в последних строках
If %Alert%==true (
Echo %LogFile% - Warning 
Set TAlert=true
) Else (
Echo %LogFile% - OK 
)
Exit /B

Последний раз редактировалось Anonymоus, 28-11-2011 в 19:36. Причина: Дополнено

Это сообщение посчитали полезным следующие участники:

Отправлено: 19:06, 28-11-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Просто гигантское вам спасибо!
Очень помогли!

Отправлено: 19:46, 28-11-2011 | #3


Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar bin.rar
(602.3 Kb, 20 просмотров)

Исправил по просьбе maestro-ussr, теперь скрипт работает корректно и с логами, содержащими символ перенаправления. Для работы нужен grep из пакета gnuwin32 в директории bin рядом со скриптом, его можно взять во вложении.

Код: Выделить весь код
@Echo Off
:: Добавляем директорию с бинарниками в Path на время работы скрипта
Echo %Path%|Find "%CD%\bin">nul||Set Path=%Path%;%CD%\bin
SetLocal EnableDelayedExpansion

:: Настройки
:: Директория с логами
Set LogDir=logs
:: Расширение логфайлов
Set LogExt=txt
:: Сколько последних строк обрабатывать
Set NOfLastStrings=15
:: Ключевые слова, через запятую
Set Words=resultset,xmlacclist,datasource,version,keyword

:: Получаем список логов
Set TAlert=false
For /F "tokens=*" %%F In ('Dir "%LogDir%\*.%LogExt%" /B /A-D') Do (
Set LogFile=%LogDir%\%%F
Set DisplayedName=%LogDir%\%%F
Call :Check
)

:: Действия, если не найдено ни одного из слов во всех логах
If %TAlert%==true (
Echo.
Echo       ALERT  
)
Pause
Exit /B 1

::Проверка на длину файла
:Check
Set s=0
For /F %%A In (%LogFile%) Do (Set /A s+=1)
Set /A Skipped=!s!-%NOfLastStrings%
If !s! GTR %NOfLastStrings% (
For /F "tokens=* skip=%SKipped%" %%S In (%LogFile%) Do (
::Вынужденная мера, строки со знаками перенаправления grep'у не передать по конвейеру
Echo %%S>>tmpfile
)
Set LogFile=tmpfile
GoTo Finder
) Else (
GoTo Finder
)
Exit /B

:: Ищем вхождения заданных слов в цикле
:Finder
Set Data=%Words%
Set Alert=true
:FinderLoop
For /F "tokens=1,* delims=," %%A In ("!Data!") Do (
If Not "%%A"=="" (
Grep -o "%%A" %LogFile%>nul&&Set Alert=false
Set Data=%%B
GoTo FinderLoop
)
)
If Exist tmpfile Del tmpfile
:: Действия, если не найдено ни одного из слов в последних строках
If %Alert%==true (
Echo %DisplayedName% - Warning 
Set TAlert=true
) Else (
Echo %DisplayedName% - OK 
)
Exit /B

Последний раз редактировалось Anonymоus, 06-12-2011 в 00:31.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:00, 29-11-2011 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в последних 15 строчках txt файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Печать последних 10 строк из txt файла. valen Скриптовые языки администрирования Windows 9 01-02-2016 11:31
Поиск слова в txt затем поиск по маске "(383)" и вывод инфы rustoss AutoIt 10 29-09-2011 15:27
CMD/BAT - Поиск последних, созданных файлов shao Скриптовые языки администрирования Windows 17 16-06-2011 03:23
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
CMD/BAT - [решено] Поиск и редактирование последних символов в строке sLiDeR-X Скриптовые языки администрирования Windows 3 21-01-2011 13:30




 
Переход