Компьютерный форум 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=245544)

Arsenik77 26-10-2012 20:12 2012847

Создание месячного отчета
 
Помогите в решении такой задачи

Есть лог от АТС в приведенном ниже формате, нужно составить ежемесячный отчет т.е. из лога убрать все строчки прошлых месяцев.

10.06.1009:19:40 17 3003 00:00:368111111119 2 9 2
12.07.1009:21:09 17 3003 00:01:0789000000009 2 9 2
12.07.1009:24:12 1 3011 00:01:062111111 2 3

з.ы. Понимаю что есть тарификаторы, но со станцией возникли какие-то проблемы и работает только hyper terminal, который и пишет логи.

Iska 26-10-2012 20:49 2012874

Arsenik77, как Вы определяете, что первая строчка — предыдущий месяц, а две последующие — текущий?

Arsenik77 26-10-2012 21:42 2012935

Планировщиком ежемесячного 1-го числа копируется лог (почему 1-го потому-что в планировщике winXP нет понятия последние число месяца), чтоб упростить чтение лога надо убрать строки принадлежащие позапрошлым месяцам.

например: на сегодня - надо убрать августовские логи, т.е. оставить все сентябрьские строки и частично октябрьские (не критично)
31.08.1209:19:40 17 3003 00:00:368111111119 2 9 2
01.09.1209:21:09 17 3003 00:01:0789000000009 2 9 2
30.09.1209:21:09 17 3003 00:01:078945456009 2 9 2
01.10.1209:24:12 1 3011 00:01:062111111 2 3

еще один путь: удалять определенное количество первых строк в логе т.е. на 1-е число каждого месяца создается свой лог допустим ats01.08.12.log (он полный за все месяцы только на 01.08.12) выясняем сколько в нем строк и удаляем их из лога ats01.09.12.log (он полный за все месяцы только на 01.09.12) и получим лог за сентябрь месяц например LOGIATS01.09.12.log

Iska 26-10-2012 23:15 2013003

Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set /a iMonth = %date:~3,2% - 1
set sMonth=0%iMonth%

type "0001.log" | findstr.exe "^...%sMonth:~-2%.*$"

endlocal
exit /b 0


Arsenik77 27-10-2012 07:02 2013083

Спасибо все работает

Arsenik77 07-08-2013 13:38 2197873

Все работало до июля, потом батник стал выводить ошибку.
Выяснил что проблема в цифрах 8 и 9 (08 и 09) их нет в восьмеричной системе.
Помогите решить эту проблему.

amel27 07-08-2013 14:08 2197908

подозреваю, что в следующий раз проблема возникнет в январе (1-й месяц)

Цитата:

Цитата Arsenik77
еще один путь: удалять определенное количество первых строк в логе т.е. на 1-е число каждого месяца создается свой лог допустим ats01.08.12.log (он полный за все месяцы только на 01.08.12) выясняем сколько в нем строк и удаляем их из лога ats01.09.12.log (он полный за все месяцы только на 01.09.12) и получим лог за сентябрь месяц например LOGIATS01.09.12.log »

может, подсчитать кол-во строк в старом файле и пропустить их при копировании?
Код:

for /f "tokens=*" %%n in ('find /c /v ""^<"ats01.08.12.log"') do set $n=%%n
(for /f "usebackq tokens=* skip=%$n%" %%a in ("ats01.09.12.log") do @echo/%%a
)>LOGIATS01.09.12.log


Arsenik77 07-08-2013 14:59 2197941

шедулер запускает батник и нужно чтоб дата (месяц) автоматический вписывалась и создавался лог типа ats-08.13.log, такое выражение уже не подходит Цитата amel27:
"ats01.08.12.log" »
Повторяю, предыдущий способ отлично работал до июля и думаю будет работать в октябре, Лог большой ~40MB. На этот комп захожу крайне редко.


Время: 13:11.

Время: 13:11.
© OSzone.net 2001-