Показать полную графическую версию : [решено] Подсчет совпадающих строк в разных файлах
Не уверен что объяснил правильно, но суть приблизительно такова: имеем несколько логов в папке logs\old\ (old1.log, old2.log old3.log и т.д.) еще один лог формируется в текущий момент и ложится в logs\new.log. Теперь собственно задача: нужно взять построчно new.log и проверить не было ли таких же строк в старых логах, в случае пяти и более совпадений записать эту строку в отдельный файл (например result.log).
@echo off
pushd "logs\old"
(
for /f "usebackq delims=" %%i in ("..\new.log") do (
for %%j in (
"old1.log"
"old2.log"
"old3.log"
) do (
for /f "usebackq delims=" %%k in (%%j) do (
set /p=%%k<nul| findstr /lc:"%%i">nul&& (
set /a count+=1
for /f %%l in ('
set /a count
') do (
if %%l==5 (
echo.%%i
)
)
)
)
)
set count=
)
)>"%~dp0result.log"
popd
exit /b
извиняюсь за непонятки - old1.log, old2.log, old3.log я дал чисто для примера
подредактировал чтобы целпяло все нужные файлы - не фурычит. создается пустой файл, хотя строки находит и их заведомо больше чем 5. где я накосячил?
@echo off
pushd "logs\old"
(
for /f "usebackq delims=" %%i in ("..\new.log") do (
for /f %%j in ('dir /B /O-D *.log') do (
for /f "usebackq delims=" %%k in (%%j) do (
set /p=%%k<nul| findstr /lc:"%%i" "..\new.log">nul&& set /a count+=1
for /f %%l in ('
set /a count
') do (
if %%l GEQ 5 (
echo.%%k
set count=
)
)
)
)
)
)>"%~dp0result.log"
popd
Elven, отредактировал и свой код (см. выше), и Ваш код (см. ниже). Оба работают.
@echo off
pushd "logs\old"
(
for /f "usebackq delims=" %%i in ("..\new.log") do (
for /f "delims=" %%j in ('dir /a-d/b/o-d *.log') do (
for /f "usebackq delims=" %%k in ("%%j") do (
set /p=%%k<nul| findstr /lc:"%%i">nul&& (
set /a count+=1
for /f %%l in ('
set /a count
') do (
if %%l equ 5 (
echo.%%k
)
)
)
)
)
set count=
)
)>"%~dp0result.log"
popd
Elven, существенно упростил решение:
@echo off
pushd "logs\old"
(
for /f "usebackq delims=" %%i in ("..\new.log") do (
for /f %%j in ('
findstr /lxc:"%%i" *.log^| find /c /v ""
') do (
if %%j geq 5 (
echo.%%i
)
)
)
)>"%~dp0result.log"
popd
exit /b
.
Georgio, спасибо. Сокращенный вариант тоже создает просто пустой файл, а вот исправленный который #4 (http://forum.oszone.net/post-2395906-4.html) работает.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.