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

evgon 15-09-2014 21:12 2403253

Удаление дубликатов.
 
Наверно было уже что то похожее, но никак не могу найти.
Имеется тхт файл 5-40к строк, в строках зачастую присутствуют всякого рода спец символы.
Нужно в этом файле удалить дубликаты строк.
Спасибо!

kiripanda 15-09-2014 21:34 2403260

uniq.exe http://gnuwin32.sourceforge.net/packages/coreutils.htm

evgon 15-09-2014 21:50 2403271

Что то не могу понять. Средством CMD/BAT можно это сделать?

Iska 16-09-2014 07:41 2403351

evgon, это и есть «посредством cmd/bat». В случае «посредством WSH» или «посредством PoSH» можно обойтись без сторонних утилит.

evgon 16-09-2014 11:23 2403417

А тыкните пальцем пожалуйста что-то я не разобрался по ссылке.

Iska 16-09-2014 12:13 2403437

Загружаете Setup. Устанавливаете. Используете:
читать дальше »
Цитата:

Цитата "C:\Program Files\GnuWin32\bin\uniq.exe" --help
Код:

Использование: uniq.exe [КЛЮЧ]... [ВХОД [ВЫХОД]]
Удаляет все кроме одной повторяющиеся строки ВХОДА (или стандартного ввода) и
печатает на ВЫХОД (или на стандартный вывод).

Аргументы, обязательные для длинных ключей, обязательны и для коротких.
  -c, --count          выводить число повторов в начале каждой строки
  -d, --repeated        выводить только повторяющиеся строки
  -D, --all-repeated[=delimit-method] напечатать все повторяющиеся строки
                        delimit-method={none(по умолчанию),prepend,separate)}
                        Разделение делается по пустым строкам.
  -f, --skip-fields=Н  не сравнивать первые Н полей
  -i, --ignore-case    игнорировать при сравнении регистр
  -s, --skip-chars=Н    не сравнивать первые Н знаков
  -u, --unique          выводить только неповторяющиеся строки
  -w, --check-chars=Н  сравнивать первые Н знаков строк
      --help    показать эту справку и выйти
      --version  показать информацию о версии и выйти


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

Об ошибках сообщайте по адресу <bug-coreutils@gnu.org>.



evgon 17-09-2014 17:15 2404023

Скачал установил, но никик не могу понять как его запустить чтоб удалить дубли например в C:\1.txt ?

Iska 17-09-2014 19:52 2404097

Например, так:
Код:

"C:\Program Files\GnuWin32\bin\uniq.exe" "C:\1.txt"
Если файл ещё не отсортирован — то так:
Код:

"C:\Program Files\GnuWin32\bin\sort.exe" "C:\1.txt" | "C:\Program Files\GnuWin32\bin\uniq.exe"

evgon 18-09-2014 13:03 2404344

Пробую вот так:
"C:\Program Files (x86)\GnuWin32\bin\uniq.exe" "C:\1.txt"
И вот так:
"C:\Program Files (x86)\GnuWin32\bin\sort.exe" "C:\1.txt" | "C:\Program Files (x86)\GnuWin32\bin\uniq.exe"

На долю секунды появляется окошко, но файл 1.txt остается неизменным. :sorry:

Iska 18-09-2014 18:05 2404520

Цитата:

Цитата evgon
На долю секунды появляется окошко, но файл 1.txt остается неизменным. »

Естественно. Вывод ведь идёт на консоль. Если бы Вы осуществляли запуск из-под командного процессора или из-под Far Manager'а (а не из Проводника или Total Commander'а и иже с ним) — Вы бы увидели этот результат.

Для вывода результата в тот же файл сделайте вывод во временный файл, а затем скопируйте его поверх исходного, например:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sSourceFile="c:\1.txt"

call :GetTemporaryName

>"%TemporaryName%" ("C:\Program Files\GnuWin32\bin\sort.exe" "%sSourceFile%" | "C:\Program Files\GnuWin32\bin\uniq.exe")
copy /y "%TemporaryName%" "%sSourceFile%"
del /f /q "%TemporaryName%"

endlocal
exit /b 0
rem ==========================================================================

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
        setlocal enableextensions enabledelayedexpansion

:NextName
        set sTempName=%temp%\temp%random%.tmp

        if exist "%sTempName%" goto :NextName

        set sProcName=%~0

        endlocal & set %sProcName:~4%=%sTempName%
        exit /b 0
rem ==========================================================================


evgon 18-09-2014 19:39 2404561

Ура! Работает! Спасибо большое!

Еще бы добавить сюда замену одного символа на другой в этом блокноте, например / заменить на \. :redface:

Iska 18-09-2014 21:10 2404603

Цитата:

Цитата evgon
Еще бы добавить сюда замену одного символа на другой в этом блокноте, например / заменить на \. »

Раз уж начали про портированные утилиты… Освойте sed:
Код:

"C:\Program Files\GnuWin32\bin\sed.exe" -e "s/\//\\/g" C:\0001.txt
Сам «sed.exe» должен был установиться туда же, в «C:\Program Files\GnuWin32\bin\».


Время: 20:56.

Время: 20:56.
© OSzone.net 2001-