|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск в последних 15 строчках txt файла |
|
CMD/BAT - [решено] Поиск в последних 15 строчках txt файла
|
Новый участник Сообщения: 2 |
Добрый день. Пишу небольшой мониторинг лог файлов. Нужна ваша помощь. Подскажите, как осуществить задумку.
Необходимо в последних 15 строчках *.txt файлов, искать определенные слова. Если в последних 15 строчках хоть одного из текстовых файлов нет ни одного из заданных слов, то выдавать сообщение "Тревога" ![]() Заранее благодарен. |
|
Отправлено: 18:33, 28-11-2011 |
Старожил Сообщения: 415
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Просто гигантское вам спасибо!
Очень помогли! |
Отправлено: 19:46, 28-11-2011 | #3 |
Старожил Сообщения: 415
|
Профиль | Отправить PM | Цитировать Исправил по просьбе 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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|