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

kolkin-alexandr 14-03-2013 13:00 2110970

Помогите удалить повторяющиеся строки в файле.
 
Дело в том, что мне помогли с батником на форуме, я из одного файла копировал в другой только дату и ники играков, получается файл на выходе такой:

2013.03.14 ROGRS[SIBRK]
2013.03.14 6BeS9
2013.03.14 vtarasow1140
2013.03.14 SLONikVorkuta
2013.03.14 is_7_KPy4E_BCEX[AVD]
2013.03.14 lavr181[PPLOB]
2013.03.14 Mangyst1977
2013.03.14 ter175
2013.03.14 Dman7[STR_B]
2013.03.14 sasprosys
2013.03.14 Tarcus92
2013.03.14 210581
2013.03.14 kasl_one23
2013.03.14 MiDimMi
2013.03.14 PROHODASASHA[TTK72]
2013.03.14 Tantal06
2013.03.14 worldtanki
2013.03.14 KENWOODyara
2013.03.14 ashepckov
2013.03.14 Oksi88
2013.03.14 aleksis666
2013.03.14 eeeeeeeeeeeeeeeeeeeeere
2013.03.14 T_A_A
2013.03.14 Marson16
2013.03.14 vitek1974
2013.03.14 4empion_mira
2013.03.14 sergejpapa[PK_TP]
2013.03.14 karasius72
2013.03.14 Anclavv
2013.03.14 UMRITEWSENAX[KB-42]
2013.03.14 ROGRS[SIBRK]
2013.03.14 6BeS9
2013.03.14 vtarasow1140
2013.03.14 SLONikVorkuta
2013.03.14 is_7_KPy4E_BCEX[AVD]
2013.03.14 Dman7[STR_B]
2013.03.14 Mangyst1977
2013.03.14 ter175
2013.03.14 lavr181[PPLOB]
2013.03.14 sasprosys
2013.03.14 Tarcus92
2013.03.14 kasl_one23
2013.03.14 210581
2013.03.14 MiDimMi
2013.03.14 PROHODASASHA[TTK72]
2013.03.14 Tantal06
2013.03.14 worldtanki
2013.03.14 KENWOODyara
2013.03.14 Oksi88
2013.03.14 ashepckov
2013.03.14 aleksis666
2013.03.14 eeeeeeeeeeeeeeeeeeeeere
2013.03.14 T_A_A
2013.03.14 Marson16
2013.03.14 vitek1974
2013.03.14 4empion_mira
2013.03.14 sergejpapa[PK_TP]
2013.03.14 karasius72
2013.03.14 Anclavv
2013.03.14 UMRITEWSENAX[KB-42]
2013.03.14 ROGRS[SIBRK]
2013.03.14 6BeS9
2013.03.14 vtarasow1140
2013.03.14 SLONikVorkuta
2013.03.14 is_7_KPy4E_BCEX[AVD]
2013.03.14 Dman7[STR_B]
2013.03.14 Mangyst1977
2013.03.14 ter175
2013.03.14 lavr181[PPLOB]
2013.03.14 sasprosys
2013.03.14 Tarcus92
2013.03.14 kasl_one23
2013.03.14 210581
2013.03.14 MiDimMi
2013.03.14 PROHODASASHA[TTK72]
2013.03.14 Tantal06
2013.03.14 worldtanki
2013.03.14 KENWOODyara
2013.03.14 Oksi88
2013.03.14 ashepckov
2013.03.14 aleksis666
2013.03.14 eeeeeeeeeeeeeeeeeeeeere
2013.03.14 T_A_A
2013.03.14 Marson16
2013.03.14 vitek1974
2013.03.14 4empion_mira
2013.03.14 sergejpapa[PK_TP]
2013.03.14 karasius72
2013.03.14 Anclavv
2013.03.14 UMRITEWSENAX[KB-42]


Тоесть в начальном файле получается повтор ников аж 3 раза, поэтому в исходном также.Хотелось бы чтобы в файле небыло повторов:

2013.03.14 ROGRS[SIBRK]
2013.03.14 6BeS9
2013.03.14 vtarasow1140
2013.03.14 SLONikVorkuta
2013.03.14 is_7_KPy4E_BCEX[AVD]
2013.03.14 lavr181[PPLOB]
2013.03.14 Mangyst1977
2013.03.14 ter175
2013.03.14 Dman7[STR_B]
2013.03.14 sasprosys
2013.03.14 Tarcus92
2013.03.14 210581
2013.03.14 kasl_one23
2013.03.14 MiDimMi
2013.03.14 PROHODASASHA[TTK72]
2013.03.14 Tantal06
2013.03.14 worldtanki
2013.03.14 KENWOODyara
2013.03.14 ashepckov
2013.03.14 Oksi88
2013.03.14 aleksis666
2013.03.14 eeeeeeeeeeeeeeeeeeeeere
2013.03.14 T_A_A
2013.03.14 Marson16
2013.03.14 vitek1974
2013.03.14 4empion_mira
2013.03.14 sergejpapa[PK_TP]
2013.03.14 karasius72
2013.03.14 Anclavv
2013.03.14 UMRITEWSENAX[KB-42]


Помогите плиз ещё!А?

gora 14-03-2013 13:24 2110987

Исходные файлы из старой темы.
Код:

@Echo Off
SetLocal EnableDelayedExpansion
Set File1=Text.Log
Set File2=Log.txt

FOR /F "usebackq tokens=*" %%a in ("%File1%") do (
        Set ta=%%a
        If Not !ta!==!ta:{"n":=! FOR /F "tokens=1,8 delims=:, " %%i in ("%%a") do If Not Defined $$$%%~j Set $$$%%~j=1& @echo %%i %%~j
)>>"%File2%"
Cd >nul 2>"%File1%"

Ограничение: ники не должны содержать пробелов!

kolkin-alexandr 14-03-2013 14:52 2111091

Цитата:

Цитата gora
Log »

Всё!Ура! Классно!!! Вот у Вас голова варит!!! :)

sov44 25-07-2013 11:48 2190353

Необходимо убрать строки в Inst_Update.txt, в которых повторяется первый токен, оставив только строку с наибольшим вторым токеном.

Office 2010

есть
Цитата:

...
...
KB982726--20130513
...
KB982726--20130515
...
KB982726--20130512
....
чтобы осталось
Цитата:

....
KB982726--20130515
....
Код:

@ECHO OFF
setlocal enabledelayedexpansion

SET UNISTALL=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products
FOR /f "tokens=10 delims=\" %%a IN ('reg query "%UNISTALL%" ^|FIND /I "00004109"') DO (
FOR /f "tokens=12 delims=\" %%b IN ('reg query "%UNISTALL%\%%a\Patches"') DO (
FOR /f "tokens=1-3" %%l IN ('reg query "%UNISTALL%\%%a\Patches\%%b" 2^>nul ^| FIND /I "Installed"') do set dat=%%n
FOR /f "tokens=1-3" %%c IN ('reg query "%UNISTALL%\%%a\Patches\%%b" 2^>nul ^| FIND /I "MoreInfoURL"') do (
FOR /f "tokens=4 delims=/" %%g IN ("%%e") DO (
>>Inst_Update.txt ECHO KB%%g--!dat!
))))
exit


Dragokas 25-07-2013 20:11 2190683

Код:

@echo off
Setlocal EnableDelayedExpansion EnableExtensions

set src=Inst_Update.txt

set KBCount=0
for /F "UseBackQ tokens=1,2 delims=-" %%K in ("%src%") do (
  if "%%L" neq "" (
    if defined KBID.%%K (
      if !KBID.%%K! LSS %%L set KBID.%%K=%%L
    ) else (
      set /A KBCount+=1
      set KBn.!KBCount!=%%K
      set KBID.%%K=%%L
    )
  )
)
(
for /L %%C in (1,1,%KBCount%) do call echo !KBn.%%C!--%%KBID.!KBn.%%C!%%
) > "Inst_Update2.txt"
pause


gora 26-07-2013 07:42 2190909

Немного упростил вариант коллеги Diskretor
Код:

@echo off
Setlocal EnableDelayedExpansion
set src=Inst_Update.txt

for /F "UseBackQ tokens=1,2 delims=-" %%K in ("%src%") do if !KBID.%%K! LSS %%L set KBID.%%K=%%L
(For /F "tokens=2,3 delims==." %%i In ('Set KBID.') Do Echo %%i--%%j)> "Inst_Update3.txt"
pause


sov44 05-08-2013 21:50 2196885

Как подправить скрипт поста 6, чтобы в выходном файле по нарастающей сначала шли восьмизначные КВ (KB982726), затем девятизначные КВ (KB2553092) ?

п.с. Возможно есть вариант сортировки выходного файла?

решил, но ищется более изящное решение :)
читать дальше »
Код:

@ECHO OFF
setlocal enabledelayedexpansion

:: добавляем ноль к 8 значным КВ
for /f "delims=" %%a in (Inst_Update2-1.txt) do (
set "line=%%a"
if /i "!line:~2,1!"=="9" (>>Inst_Update2-2.txt echo !line:KB9=KB09!) else (>>Inst_Update2-2.txt echo !line!)
)

:: формируем список состоящий из строк КВ без дублей с старшим вторым токеном by gora
for /F "UseBackQ tokens=1,2 delims=--" %%K in ("Inst_Update2-2.txt") do if !KBID.%%K! LSS %%L set KBID.%%K=%%L
(For /F "tokens=2,3 delims==." %%i In ('Set KBID.') Do Echo.%%i--%%j)>Inst_Update2-3.txt

:: убираем ноль, возвращаясь к 8 значным КВ
for /f "delims=" %%a in (Inst_Update2-3.txt) do (
set "line1=%%a"
if /i "!line1:~2,1!"=="0" (>>Inst_Update2-4.txt echo !line1:KB09=KB9!) else (>>Inst_Update2-4.txt echo !line1!)
)


Dragokas 14-08-2013 01:07 2201114

Проверкой наличия 9-го символа.

Код:

@echo off
Setlocal EnableDelayedExpansion
set src=Inst_Update.txt

for /F "UseBackQ tokens=1,2 delims=-" %%K in ("%src%") do if !KBID.%%K! LSS %%L set KBID.%%K=%%L
(For /F "tokens=2,3 delims==." %%i In ('Set KBID.') Do set _KB=%%i& if "!_KB:~8,1!"=="" Echo %%i--%%j)> "Inst_Update3.txt"
(For /F "tokens=2,3 delims==." %%i In ('Set KBID.') Do set _KB=%%i& if "!_KB:~8,1!" neq "" Echo %%i--%%j)>> "Inst_Update3.txt"


gora 14-08-2013 08:17 2201184

Цитата:

Цитата sov44
чтобы в выходном файле по нарастающей сначала шли восьмизначные КВ (KB982726), затем девятизначные КВ (KB2553092) ? »

Код:

@echo off
Setlocal EnableDelayedExpansion
set src=Inst_Update.txt

for /F "UseBackQ tokens=1,2 delims=-" %%K in ("%src%") do if !KBID.%%K! LSS %%L set KBID.%%K=%%L
(For %%a In (KB9 KB2) Do For /F "tokens=2,3 delims==." %%i In ('Set KBID.%%a') Do Echo %%i--%%j)> "Inst_Update3.txt"


muaddib 03-11-2017 23:21 2775332

@echo off
SetLocal EnableDelayedExpansion
for /f "tokens=*" %%i in ('sort 1.txt') do if not !str!==%%i echo !str!>>2.txt & set str=%%i
echo !str!>>2.txt


Время: 17:47.

Время: 17:47.
© OSzone.net 2001-