Bruce Wayne |
07-08-2013 12:56 2197837 |
Удаление повторяющихся строчек
Добрый день!
В теме 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 2197897 |
amel27, Спасибо большое! А можно пример с сохранением порядка, пожалуйста, если не затруднит?
|
Bruce Wayne |
07-08-2013 14:39 2197924 |
Всё, проблема решена! :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%"
Правда, результат перезаписывает исходный файл, но так даже удобнее)
|
Цитата:
Цитата Bruce Wayne
пример с сохранением порядка »
|
Код:
@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 2197932 |
amel27, спасибо огромное!
|
Время: 16:45.
© OSzone.net 2001-