Войти

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


drone4888
07-08-2014, 02:06
Здравствуйте, помогите, пожалуйста, написать батник для удаления строк

Имеется текст в таком формате к примеру (вместо слов также могут быть цифры)

mamy;token;8d
mamy;ret;10e
mamy;hyu;11d
mamy;reyy;18d
mamy;lop[;98
mamy;nhjjj;17g
mamy;4trgg;6999r
mamy;fjk;1444f
mamy;ewrr;148gf
mamy;kjkgj;544545f
mamy;dgfgrrt;544545f
mamy;kjkvbvbngj;4656f
toka;loka;18d85f
lpod;fhfgnhjj;rnjn556
more;herpiot;jnr66
velret;ghrt6y;fnh555

Необходимо удалить строки те, у которых попадаются в тексте больше, чем 10 строк с повторяющимся словом/цифрой.
Напимер строка со словом mamy имеет 11 строк - весь список со словом mamy надо удалить. Если строк меньше или равно 10 с повторяющимся словом или цифрой - оставить и не удалять

спасибо за помощь

Georgio
07-08-2014, 22:16
@echo off
setlocal enabledelayedexpansion
(
for /f "usebackq tokens=1-3 delims=;" %%i in ("example.txt") do (
for %%l in ("%%i" "%%j" "%%k") do (
echo.%%~l
)
)
)>1.tmp
(
for /f "delims=" %%i in ('sort 1.tmp') do (
if not defined v (
set v=%%i
set c=1
) else (
if "%%i"=="!v!" (
set /a c+=1
if !c! gtr 10 (
echo.%%i
)
) else (
set v=%%i
set c=1
)
)
)
)>2.tmp
findstr /lvg:2.tmp "example.txt">"new.txt"
del 1.tmp 2.tmp
endlocal
exit /b

Georgio
09-08-2014, 19:01
drone4888, если Вас интересует использование только первой части "триады", то это ещё проще и в некоторых случаях точнее:

@echo off
setlocal enabledelayedexpansion
(
for /f "usebackq delims=;" %%i in ("example.txt") do (
echo.%%i;
)
)>1.tmp
(
for /f "delims=" %%i in ('sort 1.tmp') do (
if not defined v (
set v=%%i
set c=1
) else (
if "%%i"=="!v!" (
set /a c+=1
if !c! gtr 10 (
echo.%%i
)
) else (
set v=%%i
set c=1
)
)
)
)>2.tmp
findstr /lvg:2.tmp "example.txt">"new.txt"
del 1.tmp 2.tmp
endlocal
exit /b

.




© OSzone.net 2001-2012