Войти

Показать полную графическую версию : Батник для подсчета информации из логов


Страниц : 1 2 [3]

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

vision-d
27-12-2013, 13:59
Нашел вот такую штуку на 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
vision-d, я не успеваю за Вами.

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

По поводу файла из этого поста (http://forum.oszone.net/post-2278543.html#post2278543): как я понимаю, он полностью идентичен выложенному ранее отсюда (http://forum.oszone.net/post-2274894.html#post2274894).

Нашел вот такую штуку на perl… Подойдет? »
Не знаю, поскольку с Perl знаком весьма ознакомительно. Но вижу, что как минимум там есть вызов «cat» и «grep».


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

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

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

vision-d
30-12-2013, 20:18
@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
Конечно, можно. Но исходный файл (http://forum.oszone.net/post-2274894.html#post2274894) уже недоступен.

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

vision-d
31-12-2013, 12:38
Исходник здесь http://yadi.sk/d/0G8GhDt0FFXKt

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

Iska
01-01-2014, 02:27
Исходник здесь http://yadi.sk/d/0G8GhDt0FFXKt »
Размер: 462 МБ
Архив. Жду архив.

vision-d
01-01-2014, 20:35
Высылаю архив http://yadi.sk/d/j6J9QB1HFJNnR

Iska
02-01-2014, 00:43
В ряде строк (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=%sPar tDocumentID% -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
А так, вот Вам пример работы с LIKE. Пакетный файл:
читать дальше »
Query - By Part of DocumentID.sql:
читать дальше » »
помогите пожалуйста подогнать под этот файл.
http://yadi.sk/d/kic8NfxQFn84V
Ни как не получается поправить, все время выходит ошибка....

Iska
11-01-2014, 05:50
помогите пожалуйста подогнать под этот файл. »
Явно пропала последняя буква из именования документа. Что представляет собой шестое поле — неясно. Пробуйте:
Пакетный файл:
@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=%sPar tDocumentID% -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
Можно реализовать поиск gj нескольким названиям?
Например: set sPartDocumentID='rsl01002975551.pd'; 'rsl01000173131.pd'; 'rsl01002937057.pd'

Iska
13-01-2014, 16:56
Можно. Только не таким:
Например: 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
@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




© OSzone.net 2001-2012