Показать полную графическую версию : Удаление дубликатов.
Наверно было уже что то похожее, но никак не могу найти.
Имеется тхт файл 5-40к строк, в строках зачастую присутствуют всякого рода спец символы.
Нужно в этом файле удалить дубликаты строк.
Спасибо!
kiripanda
15-09-2014, 21:34
uniq.exe http://gnuwin32.sourceforge.net/packages/coreutils.htm
Что то не могу понять. Средством CMD/BAT можно это сделать?
evgon, это и есть «посредством cmd/bat». В случае «посредством WSH» или «посредством PoSH» можно обойтись без сторонних утилит.
А тыкните пальцем пожалуйста что-то я не разобрался по ссылке.
Загружаете Setup (http://gnuwin32.sourceforge.net/downlinks/coreutils.php). Устанавливаете. Используете:
Использование: 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:
На долю секунды появляется окошко, но файл 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:
Еще бы добавить сюда замену одного символа на другой в этом блокноте, например / заменить на \. »
Раз уж начали про портированные утилиты… Освойте sed (https://ru.wikipedia.org/wiki/Sed):
"C:\Program Files\GnuWin32\bin\sed.exe" -e "s/\//\\/g" C:\0001.txt
Сам «sed.exe» должен был установиться туда же, в «C:\Program Files\GnuWin32\bin\».
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.