Батник для подсчета информации из логов
Добрый день!
Помогите написать батник для подсчета информации из логфайла. Нужно чтобы он подсчитал сколько раз открывалсись эти документы из приведенных в логе и общее число открытых документов за период. Строки лога выглядит так: 2013-08-12 15:11:31.373 rl1002772826 30 1,2,166,167,168,169,170,171,172,173,174,175,176,175,176,177,178,179,180,181,182,183,182,183,184,185, 186,187,188,2 ЕВГЕНИЙ АБАКМОВ 10.710.40.92 2013-08-06 15:24:31.537 rl1005019694 5 1,2,1,11,13 ЮЛИЯ АНШИНА 107.4.0.25 2013-08-07 19:11:13.037 rl1003313852 2 1,2 ИРИНА ИЛЬИНА 107.7.44.97 Структура предоставленных данных: - дата и время - номер документа - количество страниц документа, которые были просмотрены - перечень номеров страниц, которые были открыты - Имя пользователя - Фамилия пользователя - IP адрес |
Укажите, где здесь:
Цитата:
Укажите, каким образом из приведённого фрагмента можно определить, сколько раз открывался документ, и общее число. |
Номер: rsl1@002772826
Время: 15:11:31.373 Это не полный лог, я взял три строки из него для примера. Определить я думаю можно количеством повторений каждого из номера в логе. Очень надо, помогите пожалуйста разобраться! |
Вот болванка кода:
Код:
@echo off |
Никогда с подобным не сталкивался, подскажите
Я так понял в строку set sSourceFile указывать путь к моему лог файлу. set sFromDateTime - начало set sToDateTime - конец set sDocumentID - это что за параметр??? У меня выдает ошибку: C:\Users\DigitalWAVE>@echo off setlocal enableextensions enabledelayedexpansion set sSourceFile=C:\Users\DigitalWAVE\Desktop\12.txt set sFromDateTime=2013-08-05 set sToDateTime=2013-08-09 set sDocumentID=rsl1@005019694 "ProgramFiles\Log Parser 2.2\LogParser.exe" "SELECT Field3 AS [Document ID], COU NT([Document ID]) AS [Total] USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Fiel d2), 'yyyy-MM-dd hh:mm:ss.ll') AS Date INTO DATAGRID FROM '%sSourceFile%' WHERE [Document ID] = '%sDocumentID%' AND TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd' ) <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Docu ment ID]" -i:TSV -iSeparator:space -headerRow:OFF -iCodepage:1251 -stats:OFF -rt p:-1 Системе не удается найти указанный путь. endlocal exit /b 0 |
Цитата:
Цитата:
|
Да, установил.
Если вставляю код в log parser то получаю следующее: C:\Program Files (x86)\Log Parser 2.2>@echo off setlocal enableextensions enabledelayedexpansion set sSourceFile=C:\Users\DigitalWAVE\Desktop\12.txt set sFromDateTime=2013-08-05 set sToDateTime=2013-08-09 set sDocumentID=rsl1@005019694 "%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field3 AS [Document ID], C OUNT([Document ID]) AS [Total] USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Fi eld2), 'yyyy-MM-dd hh:mm:ss.ll') AS Date INTO DATAGRID FROM '%sSourceFile%' WHER E [Document ID] = '%sDocumentID%' AND TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-d d') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Do cument ID]" -i:TSV -iSeparator:space -headerRow:OFF -iCodepage:1251 -stats:OFF - rtp:-1 Error: SELECT clause: Syntax Error: unknown field 'Field3'. The closest match for input format 'TSV' is 'Field1'. To see valid fields for the TSV input format type: LogParser -h -i:TSV endlocal exit /b 0 |
Цитата:
|
vision-d, письмо получил, архив забрал. Первое, что вижу — у нас в файле наличествует Tab, а не Space в качестве разделителя; кодировка файла не ANSI/1251, а UTF-8 ;). Смотрю.
|
Итак, сначала исправленный пример для выложенного лог-файла:
Теперь по поводу вопроса из PM: Цитата:
Вот результат: Ежели потребно что-то ещё, або как-то иначе — пишите. |
Из очередного письма в PM:
Цитата:
Пакетный файл примет следующий вид: 1. Общее количество открытых страниц за период — «Query - Pages count by interval.sql»: Код:
SELECT Код:
SELECT Код:
SELECT |
Ура, Работает!!!
Огромное спасибо! |
Помогите ещё сделать тоже самое с вот таким логом: http://yadi.sk/d/EIs3pqxcEaB4h
Нужно чтоб было - Количество открытых документов - open - Количество уникальных открытых документов - open, document - Количество просмотренных страниц - view - Количество распечатанных страниц - print С выбором временных интервалов по дате Спасибо. |
Насколько я понимаю, здесь совсем другая логика, и в «page» показывается номер страницы, а не количество.
Пакетный файл: 1. «Query - Opened documents count by interval.sql»: Код:
SELECT Код:
SELECT Код:
SELECT Код:
SELECT |
Да, именно так. Все в норме, работает!
Можно ещё сделать чтобы скрипт как для первого лога составлял список какие файлы были открыты и сколько раз с интервалом дат. Спасибо за помощь! Если не трудно посоветуйте литературу по созданию таких скриптов.. |
Цитата:
Цитата:
|
Цитата:
Удалось что-нибудь придумать? |
vision-d, руки пока не дошли.
|
Спасибо за помощь, разобрался...
Код:
@echo off |
vision-d, да, примерно так. Можете ещё заменить в условии «TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date» на «Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')» как в последних примерах.
|
Такой вопрос - если в строке set sDocumentID= идет перечисление например тех же номеров документа через запятую ,
что нужно тогда указывать в WHERE AND [Document ID] = '%sDocumentID% Если запускаю так как есть, то процесс просто заканчивается. Код:
@echo off |
Цитата:
Цитата:
Код:
set sDocumentID='rsl1@005085351'; 'rsl1@003461496'; 'rsl1@004665301' |
Что-то не получается...
Код:
|
|
Прошу прощения, не доглядел....
|
Есть ещё вот такая надобность. Есть дополнительный файл с id пользователей. Id указаны в основном файле в самом конце. Нужно чтобы скрипт искал кол-во распечаток документов сделанные пользователями из дополнительного файла. Сортировка ID Документа и Total
Я написал так, но это не правильно.... Код:
C:\Program Files\Log Parser 2.2>@echo off |
vision-d, фокус, скорее всего, не удастся. LogParser работает с одним источником данных (точнее — может и с несколькими, но однотипными). Иногда можно попытаться сделать «финт ушами» вида «SELECT Field11, Field12, … FieldN FROM Source1 WHERE Field11, Field12 IN (SELECT Field21, Field22 FROM Source2)».
Можно будет попробовать OLEDB Text Driver. Как обычно: выкладываете файлы и пишете, что и как требуется извлечь. А я посмотрю, что можно будет сделать. К сожалению, на содержимое файлов при использовании данной технологии накладывается гораздо больше ограничений, нежели при использовании LogParser. |
Хотелось бы сделать чтобы для начала log parser находил в документе id из room 214 допустим. далее соберу нужную информацию
|
Код:
@echo off Код:
SELECT id Код:
@echo off |
Код:
Error: Log row too long |
На выложенном Вами файле у меня подобного не наблюдалось.
Впрочем, попробуйте: How to Fix: Log Parser – Log Row Too Long - 250 Hello - Site Home - TechNet Blogs. |
Тот файл 36 гигов весит, я его сократил..
|
Цитата:
|
Цитата:
|
Нет, это txt
http://yadi.sk/d/x4-J98ZXEu67W это оригинальный кусок лога. Может можно как-то отсеч ненужные столбцы? |
Цитата:
Цитата:
Цитата:
|
ответил в личку
|
Получил, но:
Цитата:
|
vision-d, загрузил, но возникла одна небольшая проблема: у меня нет ни 36, ни 34 свободных гигабайт :(. Буду думать.
|
Извлек нужную информацию. файл разбирать не требуется...
вышлю в личку. |
Задача всё таже, нужно чтобы скрипт искал кол-во распечаток документов сделанные пользователями (всеми) из дополнительного файла (его направил вам в личку. Сортировка ID Документа, Total.
|
Нашел вот такую штуку на perl
Код:
#!/usr/bin/perl -w |
vision-d, я не успеваю за Вами.
По поводу файла из этого поста: очень странный лог — каждая строка под 200 тысяч символов (из которых значимых — порядка двухсот-трёхсот). Подумайте, как сделать его меньше. Теоретически работать, возможно, и будет, но 35 гигабайт есть 35 гигабайт. Одно чтение длинных строк займёт уйму времени. Если найти возможность выкинуть кучу незначащих пробелов, файл вполне может сократиться до 60-100 мегабайт (а если в CSV — так и вовсе до 30-40). По поводу файла из этого поста: как я понимаю, он полностью идентичен выложенному ранее отсюда. Цитата:
Я совершенно запутался, что Вам нужно, с каким именно файлом мы работаем и т.д. |
Да, извиняюсь за путаницу.
Я вытащил из нашей таблицы user (36гигов) нужные нам строки http://yadi.sk/d/01bJCL9_F4QMx получилось 50мб. Теперь с таблицей можно работать нормально. Нам нужно сделать чтобы скрипт подсчитывал из таблицы document_statistics количество распечатанных документов сделанные пользователями из определенного зала таблицы user используя номер room. Проще говоря это получается как фильтр пользователей. Создал я новую тему где прошу копировать строки из document_statistics содержащие строки из другого файла где указаны id пользователей. Это как альтернативный вариант решения задачи http://forum.oszone.net/thread-274801.html |
Цитата:
|
Конечно, можно. Но исходный файл уже недоступен.
Вариантов несколько. Например, использовать функцию «SUBSTR()» вкупе со «STRLEN()». Либо использовать в WHERE предикат «LIKE». |
Исходник здесь http://yadi.sk/d/0G8GhDt0FFXKt
Если не сложно покажите как это сделать... |
Цитата:
Цитата:
|
Высылаю архив http://yadi.sk/d/j6J9QB1HFJNnR
|
В ряде строк (251803, 415774 и т.д.) банально отсутствуют значения в поле документа. Вследствие этого корректная работа с ним невозможна никаким методом.
А так, вот Вам пример работы с LIKE. Пакетный файл: Query - By Part of DocumentID.sql: |
Цитата:
http://yadi.sk/d/kic8NfxQFn84V Ни как не получается поправить, все время выходит ошибка.... |
Цитата:
|
Можно реализовать поиск gj нескольким названиям?
Например: set sPartDocumentID='rsl01002975551.pd'; 'rsl01000173131.pd'; 'rsl01002937057.pd' |
Можно. Только не таким:
Цитата:
Код:
… WHERE ([Document ID] LIKE '%%rsl01002975551.pd' OR [Document ID] LIKE '%%rsl01000173131.pd' OR [Document ID] LIKE '%%rsl01002937057.pd') AND … |
Цитата:
2014-01-05 14:40:17.457 print /rsl01002000000/rsl01002870000/rsl01002870109/rsl01002870109.pd 106 173957 2014-01-05 14:40:18.277 print /rsl01002000000/rsl01002870000/rsl01002870109/rsl01002870109.pd 109 173887 2014-01-05 14:40:19.157 print /rsl01002000000/rsl01002870000/rsl01002870109/rsl01002870109.pd 110 173957 2014-01-05 14:40:20.000 print /rsl01002000000/rsl01002870000/rsl01002870109/rsl01002870109.pd 111 173697 2014-01-05 14:40:20.777 print /rsl01002000000/rsl01002870000/rsl01002870109/rsl01002870109.pd 112 173957 2014-01-05 14:40:21.800 print /rsl01002000000/rsl01002870000/rsl01002870109/rsl01002870109.pd 113 173958 |
Время: 01:43. |
Время: 01:43.
© OSzone.net 2001-