Удаление дубликатов.
Наверно было уже что то похожее, но никак не могу найти.
Имеется тхт файл 5-40к строк, в строках зачастую присутствуют всякого рода спец символы.
Нужно в этом файле удалить дубликаты строк.
Спасибо!
|
Что то не могу понять. Средством CMD/BAT можно это сделать?
|
evgon, это и есть «посредством cmd/bat». В случае «посредством WSH» или «посредством PoSH» можно обойтись без сторонних утилит.
|
А тыкните пальцем пожалуйста что-то я не разобрался по ссылке.
|
Загружаете 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>.
|
|
Скачал установил, но никик не могу понять как его запустить чтоб удалить дубли например в C:\1.txt ?
|
Например, так:
Код:
"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"
|
Пробую вот так:
"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:
|
Цитата:
Цитата 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 ==========================================================================
|
Ура! Работает! Спасибо большое!
Еще бы добавить сюда замену одного символа на другой в этом блокноте, например / заменить на \. :redface:
|
Цитата:
Цитата evgon
Еще бы добавить сюда замену одного символа на другой в этом блокноте, например / заменить на \. »
|
Раз уж начали про портированные утилиты… Освойте sed:
Код:
"C:\Program Files\GnuWin32\bin\sed.exe" -e "s/\//\\/g" C:\0001.txt
Сам «sed.exe» должен был установиться туда же, в «C:\Program Files\GnuWin32\bin\».
|
Время: 20:56.
© OSzone.net 2001-