Показать полную графическую версию : [решено] Удаление повторяющихся строчек
Bruce Wayne
07-08-2013, 12:56
Добрый день!
В теме http://forum.oszone.net/post-2190909.html есть такой же вопрос, но ответ дан для строк, не содержащих пробелы. В моём случае присутствуют пробелы, кавычки и квадратные скобки. Подскажите, пожалуйста, как можно реализовать вывод из исходного файла строк, исключая дубликаты? Я пробовал так:
for /f "delims=" %%a in (123.txt) do (
findstr /i /x /c:"%%a" 456.txt || echo %%a >> 456.txt)
Но кавычки мешают :(
если порядок не важен:@echo off
(
for /f "tokens=1* delims=[] " %%a in ('^<123.txt find /n /v ""') do set "$.%%b=."
for /f "tokens=*" %%a in ('set $.') do (set "$a=%%a"
setlocal EnableDelayedExpansion
set "$a=!$a:~2,-2!"
echo/!$a!
endlocal
))>456.txt
Bruce Wayne
07-08-2013, 13:52
amel27, Спасибо большое! А можно пример с сохранением порядка, пожалуйста, если не затруднит?
Bruce Wayne
07-08-2013, 14:39
Всё, проблема решена! :D Извините за беспокойство. Вот что получилось:
@echo off
setlocal disableDelayedExpansion
set "file=123.txt"
set "line=%file%.line"
set "deduped=%file%.deduped"
set LF=^
>"%deduped%" (
for /f usebackq^ eol^=^%LF%%LF%^ delims^= %%A in ("%file%") do (
set "ln=%%A"
setlocal enableDelayedExpansion
>"%line%" (echo !ln:\=\\!)
>nul findstr /xlg:"%line%" "%deduped%" || (echo !ln!)
endlocal
)
)
>nul move /y "%deduped%" "%file%"
2>nul del "%line%"
Правда, результат перезаписывает исходный файл, но так даже удобнее)
пример с сохранением порядка »
@echo off
(
for /f "tokens=1* delims=[] " %%a in ('^<123.txt find /n /v ""') do (
set "$b=$.%%b"
setlocal EnableDelayedExpansion
if not defined !$b! echo/!$b:~2!
endlocal
set "$.%%b=."
))>456.txt
Bruce Wayne
07-08-2013, 14:50
amel27, спасибо огромное!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.