13.04.2012 15:25
Может, кому-то интересно будет решить задачку...
Есть лог
Цитата:
*** Tunnelled 340 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 132 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 116 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 52 bytes to client.
*** Tunnelled 104 bytes to remote server.
*** Tunnelled 36 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 52 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 52 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 52 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 52 bytes to client.
*** Tunnelled 36 bytes to remote server.
*** Tunnelled 52 bytes to client.
*** Tunnelled 36 bytes to remote server.
Задача - посчитать суммарное количество туннелированных байтов.
13.04.2012 16:09
реализация тоже нужна? или только в теории? операция разовая или?

я бы импортнул (или присоеденил) в аксес и через split(строка, пробел)(2) выделил и просуммировал все числа ...

или надо именно в батнике (cmd) все сделать?
13.04.2012 16:14
Теория понятна.. Тут так... Самому некогда и лень, но результат по логу посмотреть хотелось бы. Задачка типовая и кому-то может оказаться полезной. А так я и сам могу к себе перекинуть и в bash накидать на коленке :) Т.е. смесь спортивного интереса и лени. Так-то и в Excel затащить можно.
13.04.2012 16:56
входящий файл - tun.log
tun.cmd
Код:
@echo off
for /f "tokens=3" %%i in (tun.log) do set /A counter=!counter!+%%i
echo %counter%
Код:
cmd /v:on /c tun.cmd
13.04.2012 17:25
Цитата:
Andrew_Konev входящий файл - tun.log
tun.cmd
у меня не отработал - выдает
C:\000>for /F "tokens=3" %i in (1.txt) do set /A counter=!counter!+%i
C:\000>set /A counter=!counter!+340
Отсутствующий оператор.
C:\000>set /A counter=!counter!+36
Отсутствующий оператор.
C:\000>set /A counter=!counter!+132
Отсутствующий оператор.
C:\000>set /A counter=!counter!+36
Отсутствующий оператор.
C:\000>echo 0

у меня вот так считает правильно (правда через временный файлик)

1.txt - это сам лог

2.bat - внутри
@echo off
set /a n=0
for /f %%i in ('findstr /x "[0-9]*" %1') do set /a n+=%%i
echo %n%

3.bat - внутри
@echo off
for /F "tokens=3 delims= " %%i in ( %1) do @echo %%i

4.bat - внутри
@echo off
call 3.bat 1.txt > 11.txt
call 2.bat 11.txt

в результате на куске что привел Олег
C:\000>4
1364

пы сы - пардон, но батники влом объединять :)
13.04.2012 20:20
Да ну, все у Андрея правильно, такой простой формат элементарно разбирается через for /f "tokens="
В test.txt данные из примера.

cnt.cmd
Код:
@echo off

set ff=test.txt

set /a cnt=0
set /a sum=0
set /a sum_client=0
set /a sum_remote=0

SETLOCAL ENABLEDELAYEDEXPANSION
FOR /F "tokens=3,4,5,6 delims= " %%N in (%ff%) do ( 
    set /a cnt=cnt+1
    if "%%Q"=="remote" ( 
        set /a sum_remote=sum_remote+%%N
    ) else (
        set /a sum_client=sum_client+%%N
    ) 
rem    echo N=%%N
rem    echo "%%N" "%%Q"
rem    echo sum_client=!sum_client!
rem    echo sum_remote=!sum_remote!
  ) 
set /a sum=sum_client+sum_remote

echo cnt=%cnt%
echo sum_client=%sum_client%
echo sum_remote=%sum_remote%
echo sum=%sum%
Код:
C:\Temp>cnt.cmd
cnt=20         
sum_client=936 
sum_remote=428 
sum=1364
14.04.2012 14:53
Цитата:
student у меня не отработал - выдает
C:\000>for /F "tokens=3" %i in (1.txt) do set /A counter=!counter!+%i
C:\000>set /A counter=!counter!+340
Отсутствующий оператор....
ты не обратил внимание на формат вызова:
Код:
cmd /v:on /c tun.cmd
14.04.2012 17:21
а вот эту замечтательную штуку я не знал:
Код:
SETLOCAL ENABLEDELAYEDEXPANSION
Часовой пояс GMT +3, время: 17:37.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.