Войти

Показать полную графическую версию : [решено] Помогите удалить повторяющиеся строки в файле.


kolkin-alexandr
14-03-2013, 13:00
Дело в том, что мне помогли с батником на форуме, я из одного файла копировал в другой только дату и ники играков, получается файл на выходе такой:

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
Исходные файлы из старой темы.
@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
Log »

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

sov44
25-07-2013, 11:48
Необходимо убрать строки в 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
@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
Немного упростил вариант коллеги 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
Как подправить скрипт поста 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
Проверкой наличия 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
чтобы в выходном файле по нарастающей сначала шли восьмизначные КВ (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
@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




© OSzone.net 2001-2012