Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Батник для подсчета информации из логов (http://forum.oszone.net/showthread.php?t=273944)

vision-d 13-12-2013 16:44 2271869

Батник для подсчета информации из логов
 
Добрый день!
Помогите написать батник для подсчета информации из логфайла. Нужно чтобы он подсчитал сколько раз открывалсись эти документы из приведенных в логе и общее число открытых документов за период. Строки лога выглядит так:
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 адрес

Iska 13-12-2013 20:35 2272004

Укажите, где здесь:
Цитата:

2013-08-12 15:11:31.373 rsl1@002772826 30 …
именно номер, и где здесь время.

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

vision-d 14-12-2013 12:22 2272289

Номер: rsl1@002772826
Время: 15:11:31.373
Это не полный лог, я взял три строки из него для примера. Определить я думаю можно количеством повторений каждого из номера в логе.
Очень надо, помогите пожалуйста разобраться!

Iska 14-12-2013 14:09 2272330

Вот болванка кода:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\0002.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], COUNT([Document ID]) AS [Total] USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2), '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 [Document ID]" -i:TSV -iSeparator:space -headerRow:OFF -iCodepage:1251 -stats:OFF -rtp:-1

endlocal
exit /b 0

для Log Parser 2.2. Разумеется, все параметры можно хоть вводить, хоть передавать в командной строке; вывод направлять не в GUI, а на консоль или в файл и т.п. Настраивайте так, как Вам будет удобнее.

vision-d 14-12-2013 20:59 2272529

Никогда с подобным не сталкивался, подскажите
Я так понял в строку 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

Iska 15-12-2013 14:48 2272641

Цитата:

Цитата vision-d
set sDocumentID - это что за параметр??? »

Номер документа.

Цитата:

Цитата vision-d
У меня выдает ошибку: …Системе не удается найти указанный путь. »

Вы загрузили и установили Log Parser 2.2?

vision-d 15-12-2013 19:41 2272825

Да, установил.
Если вставляю код в 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

Iska 15-12-2013 19:55 2272834

Цитата:

Цитата vision-d
Error: SELECT clause: Syntax Error: unknown field 'Field3'.
The closest match for input format 'TSV' is 'Field1'. »

Делать нечего — vision-d, выложите реальный лог-файл, упаковав его в архив под паролем, на RGhost. Ссылку на выложенный архив и пароль — отправьте мне в личку. Постарайтесь выбрать лог-файл поменьше размером.

Iska 16-12-2013 15:18 2273231

vision-d, письмо получил, архив забрал. Первое, что вижу — у нас в файле наличествует Tab, а не Space в качестве разделителя; кодировка файла не ANSI/1251, а UTF-8 ;). Смотрю.

Iska 16-12-2013 15:47 2273247

Итак, сначала исправленный пример для выложенного лог-файла:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\StatDocsView3kv.txt

set sFromDateTime=2013-08-05
set sToDateTime=2013-08-15
set sDocumentID=rsl1@004665301

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field2 AS [Document ID], COUNT([Document ID]) AS [Total] USING Field1 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 [Document ID]" -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1

endlocal
exit /b 0


Теперь по поводу вопроса из PM:
Цитата:

И ещё вопрос, можно сделать так чтобы скрипт составлял список какие файлы были открыты и сколько раз, а не искал кол-во повторений по отдельности для каждого документа...
Можно (полагаю, даты интервала при этом остаются в силе?). Достаточно просто убрать условие для отбора документа. Ну, и ещё можно добавить сортировку, скажем, по количеству:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\StatDocsView3kv.txt

set sFromDateTime=2013-08-05
set sToDateTime=2013-08-15

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field2 AS [Document ID], COUNT([Document ID]) AS [Total] USING Field1 AS Date INTO DATAGRID FROM '%sSourceFile%' WHERE TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Document ID] ORDER BY Total DESC" -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1

endlocal
exit /b 0


Вот результат:


Ежели потребно что-то ещё, або как-то иначе — пишите.

Iska 18-12-2013 02:44 2274153

Из очередного письма в PM:
Цитата:

Можно ли ещё сделать чтобы он выдавал кол-во открытых страниц за период, подсчитывал кол-во уникальных документов за период и документов открытых вообще за период...
Поскольку Вам требуется выполнять ряд разных запросов на одном и том же источнике данных, есть смысл вынести текст запросов в отдельные файлы.

Пакетный файл примет следующий вид:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\StatDocsView3kv.txt

set sFromDateTime=2013-08-05
set sToDateTime=2013-08-15

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Pages count by interval.sql"?SourceFile=%sSourceFile%+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%            -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Unique documents count by interval.sql"?SourceFile=%sSourceFile%+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime% -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Documents count by interval.sql"?SourceFile=%sSourceFile%+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%        -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1

endlocal
exit /b 0



1. Общее количество открытых страниц за период — «Query - Pages count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        SUM(Field3) AS [Total pages]
USING Field1 AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')

2. Количество уникальных документов за период — «Query - Unique documents count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        COUNT(DISTINCT Field2) AS [Total unique documents]
USING Field1 AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')

3. Общее количество документов за период — «Query - Documents count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        COUNT(Field2) AS [Total documents]
USING Field1 AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')

Надеюсь, ничего не напутал.

vision-d 18-12-2013 11:49 2274250

Ура, Работает!!!
Огромное спасибо!

vision-d 19-12-2013 14:02 2274894

Помогите ещё сделать тоже самое с вот таким логом: http://yadi.sk/d/EIs3pqxcEaB4h
Нужно чтоб было
- Количество открытых документов - open
- Количество уникальных открытых документов - open, document
- Количество просмотренных страниц - view
- Количество распечатанных страниц - print
С выбором временных интервалов по дате


Спасибо.

Iska 19-12-2013 16:18 2274981

Насколько я понимаю, здесь совсем другая логика, и в «page» показывается номер страницы, а не количество.

Пакетный файл:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\Песочница\036\new  2.txt

set sFromDateTime=2013-12-05
set sToDateTime=2013-12-15

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Opened documents count by interval.sql"?SourceFile="%sSourceFile%"+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%            -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iCodepage:1251 -stats:OFF -rtp:-1
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Unique opened documents count by interval.sql"?SourceFile="%sSourceFile%"+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%            -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iCodepage:1251 -stats:OFF -rtp:-1
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Viewed pages count by interval.sql"?SourceFile="%sSourceFile%"+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%            -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iCodepage:1251 -stats:OFF -rtp:-1
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - Printed pages count by interval.sql"?SourceFile="%sSourceFile%"+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%            -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iCodepage:1251 -stats:OFF -rtp:-1

endlocal
exit /b 0



1. «Query - Opened documents count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        COUNT(Field4) AS [Total opened documents]
USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Field3 = 'open' AND Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')

2. «Query - Unique opened documents count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        COUNT(DISTINCT Field4) AS [Total opened unique documents]
USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Field3 = 'open' AND Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')

3. «Query - Viewed pages count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        COUNT(Field4) AS [Total viewed pages]
USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Field3 = 'view' AND Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')

4. «Query - Printed pages count by interval.sql»:
Код:

SELECT
        '%FromDateTime%' AS [From date],
        '%ToDateTime%' AS [To date],
        COUNT(Field4) AS [Total printed pages]
USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS Date
INTO DATAGRID
FROM '%SourceFile%'
WHERE Field3 = 'print' AND Date BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')


vision-d 20-12-2013 11:17 2275514

Да, именно так. Все в норме, работает!
Можно ещё сделать чтобы скрипт как для первого лога составлял список какие файлы были открыты и сколько раз с интервалом дат.
Спасибо за помощь!
Если не трудно посоветуйте литературу по созданию таких скриптов..

Iska 20-12-2013 12:27 2275562

Цитата:

Цитата vision-d
Можно ещё сделать чтобы скрипт как для первого лога составлял список какие файлы были открыты и сколько раз с интервалом дат. »

Подумаем.

Цитата:

Цитата vision-d
Если не трудно посоветуйте литературу по созданию таких скриптов.. »

В документации — «%ProgramFiles%\Log Parser 2.2\LogParser.chm». По составлению же самих запросов SQL сгодится любой приличный учебник по Microsoft SQL Server объёмом от 1200-1400 страниц и выше (в LogParser используется урезанный вариант SQL).

vision-d 23-12-2013 09:55 2277150

Цитата:

Цитата Iska
Подумаем »

Салют!
Удалось что-нибудь придумать?

Iska 23-12-2013 11:25 2277183

vision-d, руки пока не дошли.

vision-d 23-12-2013 13:29 2277229

Спасибо за помощь, разобрался...

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\Users\nadeykinDA\Desktop\document_statistics.txt

set sFromDateTime=2013-05-05
set sToDateTime=2013-12-15
set sDocumentID=

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field4 AS [Document ID], COUNT([Document ID]) AS [Total] USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS Date INTO DATAGRID FROM '%sSourceFile%' WHERE Field3 = 'open' AND TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Document ID] ORDER BY Total DESC" -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:1251 -stats:OFF -rtp:-1

endlocal
exit /b 0


Iska 23-12-2013 13:44 2277232

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')» как в последних примерах.

vision-d 23-12-2013 15:46 2277263

Такой вопрос - если в строке set sDocumentID= идет перечисление например тех же номеров документа через запятую ,
что нужно тогда указывать в WHERE AND [Document ID] = '%sDocumentID%
Если запускаю так как есть, то процесс просто заканчивается.
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\Users\nadeykinDA\Desktop\document_statistics.txt

set sFromDateTime=2013-05-05
set sToDateTime=2013-12-15
set sDocumentID=/rsl01002000000/rsl01002738000/rsl01002738582/rsl01002738582.pdf
, /rsl01002000000/rsl01002745000/rsl01002745687/rsl01002745687.pdf


"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field4 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%' WHERE
 Field3 = 'open' AND [Document ID] = '%sDocumentID%' AND TO_TIMESTAMP('%sFromDat
eTime%', 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >
= Date GROUP BY [Document ID] ORDER BY Total DESC" -i:TSV -iSeparator:space -hea
derRow:OFF -nSkipLines:2 -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:1251 -st
ats:OFF -rtp:-1

endlocal
exit /b 0


Iska 23-12-2013 15:59 2277274

Цитата:

Цитата vision-d
если в строке set sDocumentID= идет перечисление например тех же номеров документа через запятую , »

Через точку с запятой. Значения — обрамить апострофами.

Цитата:

Цитата vision-d
что нужно тогда указывать в WHERE AND [Document ID] = '%sDocumentID% »

Код:

set sDocumentID='rsl1@005085351'; 'rsl1@003461496'; 'rsl1@004665301'

… WHERE [Document ID] IN (%sDocumentID%) …


vision-d 23-12-2013 16:50 2277316

Что-то не получается...
Код:


C:\Program Files\Log Parser 2.2>@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=D:\Script\StatDocsView3kv.txt

set sFromDateTime=2013-08-05
set sToDateTime=2013-08-15
set sDocumentID='rsl1@005085351'; 'rsl1@003461496'; 'rsl1@004665301'


"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field2 AS [Document ID], C
OUNT([Document ID]) AS [Total] USING Field1 AS Date INTO DATAGRID FROM '%sSource
File%' WHERE [Document ID] IN '%sDocumentID%' AND TO_TIMESTAMP('%sFromDateTime%'
, 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date
GROUP BY [Document ID]" -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-M
M-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1
Error: Syntax Error: <content>: no valid content: expecting opening parenthesis
instead of token '''rsl1@005085351';'

endlocal
exit /b 0


Iska 23-12-2013 23:26 2277546

Цитата:

Цитата vision-d
Что-то не получается... »

Сравните:
читать дальше »
Цитата:

Цитата Iska
WHERE [Document ID] IN (%sDocumentID%) »

и:
Цитата:

Цитата vision-d
WHERE [Document ID] IN '%sDocumentID%' »


Зачем там апострофы вместо скобок?! Об этом и написано в:
Цитата:

Цитата vision-d
Error: Syntax Error: <content>: no valid content: expecting opening parenthesis instead of token '''rsl1@005085351';' »

Пробуйте:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\StatDocsView3kv.txt

set sFromDateTime=2013-08-05
set sToDateTime=2013-08-15
set sDocumentID='rsl1@005085351'; 'rsl1@002772826'; 'rsl1@004665301'

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field2 AS [Document ID], COUNT([Document ID]) AS [Total] USING Field1 AS Date INTO DATAGRID FROM '%sSourceFile%' WHERE [Document ID] IN (%sDocumentID%) AND Date BETWEEN TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') GROUP BY [Document ID]" -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1

endlocal
exit /b 0


vision-d 24-12-2013 09:54 2277667

Прошу прощения, не доглядел....

vision-d 24-12-2013 12:18 2277711

Есть ещё вот такая надобность. Есть дополнительный файл с id пользователей. Id указаны в основном файле в самом конце. Нужно чтобы скрипт искал кол-во распечаток документов сделанные пользователями из дополнительного файла. Сортировка ID Документа и Total
Я написал так, но это не правильно....

Код:

C:\Program Files\Log Parser 2.2>@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=C:\Users\nadeykinDA\Desktop\document_statistics.txt
set sSourceFile2=C:\Users\nadeykinDA\Desktop\qqq.txt

set sFromDateTime=2013-05-05
set sToDateTime=2013-12-15
set sDocumentID=

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field4 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%' WHERE
 Field3 = 'print' AND Field1 FROM '%sSourceFile2%' = Field8 INTO DATAGRID FROM '
%sSourceFile%'
AND TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') <= Date AND TO_
TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Document ID] ORDER BY
 Total DESC" -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iTsFormat:"y
yyy-MM-dd hh:mm:ss.ll" -iCodepage:1251 -stats:OFF -rtp:-1
Error: Syntax Error: <term1>: AND operator not followed by a valid <term1>:  nea
r 'Field1'

endlocal
exit /b 0

Помогите пожалуйста разобраться...

Iska 24-12-2013 12:41 2277724

vision-d, фокус, скорее всего, не удастся. LogParser работает с одним источником данных (точнее — может и с несколькими, но однотипными). Иногда можно попытаться сделать «финт ушами» вида «SELECT Field11, Field12, … FieldN FROM Source1 WHERE Field11, Field12 IN (SELECT Field21, Field22 FROM Source2)».

Можно будет попробовать OLEDB Text Driver. Как обычно: выкладываете файлы и пишете, что и как требуется извлечь. А я посмотрю, что можно будет сделать. К сожалению, на содержимое файлов при использовании данной технологии накладывается гораздо больше ограничений, нежели при использовании LogParser.

vision-d 24-12-2013 16:55 2277848

Хотелось бы сделать чтобы для начала log parser находил в документе id из room 214 допустим. далее соберу нужную информацию

Iska 24-12-2013 17:35 2277877

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\user.txt
set sRoom=214

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - ID by Room.sql"?SourceFile=%sSourceFile%+Room=%sRoom% -i:TSV -iSeparator:space -headerRow:ON -iCodepage:1251 -stats:OFF -rtp:-1

endlocal
exit /b 0

Query - ID by Room.sql:
Код:

SELECT id
INTO DATAGRID
FROM '%SourceFile%'
WHERE room = %Room%

Или напрямую:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0336\user.txt
set sRoom=214

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT id INTO DATAGRID FROM '%sSourceFile%' WHERE room = %sRoom%" -i:TSV -iSeparator:space -headerRow:ON -iCodepage:1251 -stats:OFF -rtp:-1

endlocal
exit /b 0


vision-d 24-12-2013 21:49 2278004

Код:

Error: Log row too long
тут уже где-то в реестре нужно менять параметр вроде..

Iska 25-12-2013 06:18 2278159

На выложенном Вами файле у меня подобного не наблюдалось.

Впрочем, попробуйте: How to Fix: Log Parser – Log Row Too Long - 250 Hello - Site Home - TechNet Blogs.

vision-d 25-12-2013 10:41 2278219

Тот файл 36 гигов весит, я его сократил..

vision-d 25-12-2013 11:11 2278235

Цитата:

Цитата Iska
Впрочем, попробуйте: How to Fix: Log Parser – Log Row Too Long - 250 Hello - Site Home - TechNet Blogs. »

Уже пробовал, но без результатно. Там формат csv, а у нас txt может поэтому...

Iska 25-12-2013 11:27 2278243

Цитата:

Цитата vision-d
Тот файл 36 гигов весит »

А упакованный с максимальным размером словаря и принудительно выставленным параметром «Сжатие текста» (речь про RAR)?

vision-d 25-12-2013 11:38 2278249

Нет, это txt
http://yadi.sk/d/x4-J98ZXEu67W
это оригинальный кусок лога. Может можно как-то отсеч ненужные столбцы?

Iska 25-12-2013 11:54 2278260

Цитата:

Цитата vision-d
Нет, это txt »

Вот я и спрашиваю, сколько займёт:
Цитата:

Цитата Iska
упакованный с максимальным размером словаря и принудительно выставленным параметром «Сжатие текста» (речь про RAR)? »

Цитата:

Цитата vision-d
http://yadi.sk/d/x4-J98ZXEu67W
это оригинальный кусок лога. »

Там что-то непонятное с кодировкой. UTF-8 с BOM был открыт как OEM/866 и вновь сохранён как UTF-8 с BOM. Полагаю, так Вы вырезали. Нужен оригинальный лог.

vision-d 25-12-2013 12:55 2278292

ответил в личку

Iska 25-12-2013 13:34 2278303

Получил, но:
Цитата:

Ничего не найдено

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

Iska 25-12-2013 17:49 2278442

vision-d, загрузил, но возникла одна небольшая проблема: у меня нет ни 36, ни 34 свободных гигабайт :(. Буду думать.

vision-d 25-12-2013 22:15 2278543

Извлек нужную информацию. файл разбирать не требуется...
вышлю в личку.

vision-d 26-12-2013 08:04 2278694

Задача всё таже, нужно чтобы скрипт искал кол-во распечаток документов сделанные пользователями (всеми) из дополнительного файла (его направил вам в личку. Сортировка ID Документа, Total.

vision-d 27-12-2013 13:59 2279318

Нашел вот такую штуку на perl
Код:

#!/usr/bin/perl -w

my $strings = 'file1';
my $source = 'file2';
my $target = 'file3';

open(STRINGS, "< $strings") or die "Can't open $strings for reading";
while(<STRINGS>) {
s/\s+$//;
`cat $source | grep '$_' >> $target`;
}
close STRINGS;

Подойдет?

Iska 27-12-2013 16:13 2279369

vision-d, я не успеваю за Вами.

По поводу файла из этого поста: очень странный лог — каждая строка под 200 тысяч символов (из которых значимых — порядка двухсот-трёхсот). Подумайте, как сделать его меньше. Теоретически работать, возможно, и будет, но 35 гигабайт есть 35 гигабайт. Одно чтение длинных строк займёт уйму времени. Если найти возможность выкинуть кучу незначащих пробелов, файл вполне может сократиться до 60-100 мегабайт (а если в CSV — так и вовсе до 30-40).

По поводу файла из этого поста: как я понимаю, он полностью идентичен выложенному ранее отсюда.

Цитата:

Цитата vision-d
Нашел вот такую штуку на perl… Подойдет? »

Не знаю, поскольку с Perl знаком весьма ознакомительно. Но вижу, что как минимум там есть вызов «cat» и «grep».


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

vision-d 27-12-2013 16:50 2279391

Да, извиняюсь за путаницу.
Я вытащил из нашей таблицы user (36гигов) нужные нам строки http://yadi.sk/d/01bJCL9_F4QMx получилось 50мб.
Теперь с таблицей можно работать нормально.
Нам нужно сделать чтобы скрипт подсчитывал из таблицы document_statistics
количество распечатанных документов сделанные пользователями из определенного зала таблицы user используя номер room.
Проще говоря это получается как фильтр пользователей.

Создал я новую тему где прошу копировать строки из document_statistics содержащие строки из другого файла где указаны id пользователей. Это как альтернативный вариант решения задачи http://forum.oszone.net/thread-274801.html

vision-d 30-12-2013 20:18 2280888

Цитата:

Цитата vision-d
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=C:\Users\nadeykinDA\Desktop\document_statistics.txt
set sFromDateTime=2013-05-05
set sToDateTime=2013-12-15
set sDocumentID=
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field4 AS [Document ID], COUNT([Document ID]) AS [Total] USING TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS Date INTO DATAGRID FROM '%sSourceFile%' WHERE Field3 = 'open' AND TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Document ID] ORDER BY Total DESC" -i:TSV -iSeparator:space -headerRow:OFF -nSkipLines:2 -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:1251 -stats:OFF -rtp:-1
endlocal
exit /b 0 »

Возможно ли сделать так чтобы задавать имя документа в строке set "sDocumentID=" не полностью /rsl01005000000/rsl01005031000/rsl01005031509/rsl01005031509.pdf, а использовать только последнюю часть названия /rsl01005031509.pdf?

Iska 31-12-2013 02:19 2281034

Конечно, можно. Но исходный файл уже недоступен.

Вариантов несколько. Например, использовать функцию «SUBSTR()» вкупе со «STRLEN()». Либо использовать в WHERE предикат «LIKE».

vision-d 31-12-2013 12:38 2281139

Исходник здесь http://yadi.sk/d/0G8GhDt0FFXKt

Если не сложно покажите как это сделать...

Iska 01-01-2014 02:27 2281469

Цитата:

Цитата vision-d
Исходник здесь http://yadi.sk/d/0G8GhDt0FFXKt »

Цитата:

Размер: 462 МБ
Архив. Жду архив.

vision-d 01-01-2014 20:35 2281752

Высылаю архив http://yadi.sk/d/j6J9QB1HFJNnR

Iska 02-01-2014 00:43 2281838

В ряде строк (251803, 415774 и т.д.) банально отсутствуют значения в поле документа. Вследствие этого корректная работа с ним невозможна никаким методом.

А так, вот Вам пример работы с LIKE. Пакетный файл:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0344\document_statistics.txt
set sFromDateTime=2013-12-01
set sToDateTime=2013-12-31
set sPartDocumentID=rsl01003399443.pdf

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - By Part of DocumentID.sql"?SourceFile=%sSourceFile%+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%+PartDocumentID=%sPartDocumentID% -i:TSV -iSeparator:space -nSkipLines:2 -headerRow:OFF -iCodepage:65001 -stats:OFF -rtp:-1

endlocal
exit /b 0


Query - By Part of DocumentID.sql:
читать дальше »
Код:

SELECT
        [Date],
        [Document ID],
        [Action],
        [Page],
        [Succeeded],
        [IP],
        [User ID],
        [Extra]
USING
        TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS [Date],
        Field3 AS [Action],
        Field4 AS [Document ID],
        Field5 AS [Page],
        Field6 AS [Succeeded],
        Field7 AS [IP],
        Field8 AS [User ID],
        Field9 AS [Extra]
INTO DATAGRID
FROM '%SourceFile%'
WHERE
        [Document ID] LIKE '%%%PartDocumentID%' AND
        [Date] BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')
ORDER BY [Date]


vision-d 10-01-2014 16:56 2286115

Цитата:

Цитата Iska
А так, вот Вам пример работы с LIKE. Пакетный файл:
читать дальше »
Query - By Part of DocumentID.sql:
читать дальше » »

помогите пожалуйста подогнать под этот файл.
http://yadi.sk/d/kic8NfxQFn84V
Ни как не получается поправить, все время выходит ошибка....

Iska 11-01-2014 05:50 2286543

Цитата:

Цитата vision-d
помогите пожалуйста подогнать под этот файл. »

Явно пропала последняя буква из именования документа. Что представляет собой шестое поле — неясно. Пробуйте:
читать дальше »
Пакетный файл:
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile=E:\Песочница\0349\2013.txt
set sFromDateTime=2013-01-01
set sToDateTime=2013-12-31
set sPartDocumentID=rsl01000297830.pd

"%ProgramFiles%\Log Parser 2.2\LogParser.exe" file:"Query - By Part of DocumentID.sql"?SourceFile=%sSourceFile%+FromDateTime=%sFromDateTime%+ToDateTime=%sToDateTime%+PartDocumentID=%sPartDocumentID% -i:TSV -iSeparator:space -headerRow:OFF -iCodepage:1251 -stats:OFF -rtp:-1

endlocal
exit /b 0

Query - By Part of DocumentID.sql:
Код:

SELECT
        [Date],
        [Document ID],
        [Action],
        [Page],
        [Field6]
USING
        TO_TIMESTAMP(STRCAT(STRCAT(Field1, ' '), Field2),'yyyy-MM-dd hh:mm:ss.ll') AS [Date],
        Field3 AS [Action],
        Field4 AS [Document ID],
        Field5 AS [Page]
INTO DATAGRID
FROM '%SourceFile%'
WHERE
        [Document ID] LIKE '%%%PartDocumentID%' AND
        [Date] BETWEEN TO_TIMESTAMP('%FromDateTime%', 'yyyy-MM-dd') AND TO_TIMESTAMP('%ToDateTime%', 'yyyy-MM-dd')
ORDER BY [Date]


vision-d 13-01-2014 16:22 2288305

Можно реализовать поиск gj нескольким названиям?
Например: set sPartDocumentID='rsl01002975551.pd'; 'rsl01000173131.pd'; 'rsl01002937057.pd'

Iska 13-01-2014 16:56 2288326

Можно. Только не таким:
Цитата:

Цитата vision-d
Например: 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 …

vision-d 07-04-2014 16:42 2334309

Цитата:

Цитата Iska
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFile=E:\Песочница\0336\StatDocsView3kv.txt
set sFromDateTime=2013-08-05
set sToDateTime=2013-08-15
"%ProgramFiles%\Log Parser 2.2\LogParser.exe" "SELECT Field2 AS [Document ID], COUNT([Document ID]) AS [Total] USING Field1 AS Date INTO DATAGRID FROM '%sSourceFile%' WHERE TO_TIMESTAMP('%sFromDateTime%', 'yyyy-MM-dd') <= Date AND TO_TIMESTAMP('%sToDateTime%', 'yyyy-MM-dd') >= Date GROUP BY [Document ID] ORDER BY Total DESC" -i:TSV -iSeparator:tab -headerRow:OFF -iTsFormat:"yyyy-MM-dd hh:mm:ss.ll" -iCodepage:65001 -stats:OFF -rtp:-1
endlocal
exit /b 0 »

Можно ли сделать чтобы он выводил в результатах дополнительный столбец где бы указывался номер из Field6 для каждого номера документа?

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-