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

drone4888 07-08-2014 02:06 2385976

удаление строк
 
Здравствуйте, помогите, пожалуйста, написать батник для удаления строк

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

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 2386357

Код:

@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 2387097

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

.


Время: 06:28.

Время: 06:28.
© OSzone.net 2001-