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

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)

Но кавычки мешают :(

amel27 07-08-2013 13:19 2197851

если порядок не важен:
Код:

@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%"

Правда, результат перезаписывает исходный файл, но так даже удобнее)

amel27 07-08-2013 14:47 2197929

Цитата:

Цитата 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.

Время: 16:45.
© OSzone.net 2001-