Как удалить дубликаты строк регуляркой?

cocs

Мой дом здесь!
Регистрация
5 Дек 2009
Сообщения
550
Реакции
264
Вобщем есть файл на несколько тысяч строк, большинство этих строк два раза повторяются, и только незначительная их часть встречается единожды. Вот как раз мне и нужно получить эту незначительную часть, убрав все повторяющиеся. Т.е. не только очистить от дублей (таких сервисов множество), а удалить те которые повторяются два раза.
 
Загони построчно в MySQL и сделай select distinct
 
  • Нравится
Реакции: cocs
PHP:
$array = array('1', '2', '1', '3'); // $array = file('file.txt');

$result = array_diff($array, array_diff_assoc($array, array_unique($array)));
var_dump($result);
 
  • Нравится
Реакции: cocs
При отсортированном списке в Notepad++
Найти
^(.*\r?\n)(\1)+
и заменить на пусто
 
Загони построчно в MySQL и сделай select distinct
Вот пример, имеем мы такие данные:
значение один
значение два
значение три
значение четыре
значение пять
значение шесть
значение два
значение три
значение пять
значение шесть

мне нужно отсеять все ненужное, т.е.: значение два, значение три, значение пять, значение шесть. Так как они повторяются два раза. На выходе мне необходимо получить только:
значение один
значение четыре

Насколько я понял, оператор SQL DISTINCT выдаст мне
значение один
значение два
значение три
значение четыре
значение пять
значение шесть

А это уже не тот результат который мне нужен...
 
select * from table_name where id_filed not in (select distinct * from table_name)
 
jst1, ты попробуй выполнить хотя бы ))) Выбрать все строки, где значения не попадают в список уникальных строк...
В лучшем случае у тебя будет пустое множество, в худшем - ошибка, т.к. нельзя делать "NOT IN SELECT *" - нужно указывать конкретный столбец, даже если он один.

@cocs, сорян, не правильно понял задание...
И так, запихиваем всё в MySQL, забираем все строки:
SELECT `string` FROM `table`
Теперь нам надо узнать сколько у нас есть строк:
SELECT count(*), `string` FROM `table`
Ок, но нам нужно не общее количество, а количество одинаковых строк, сгруппируем:
SELECT count(*), `string` FROM `table` GROUP BY `string`
Отлично, мы получили сколько одинаковых строк мы имеем. Добавим условие:
SELECT count(*) AS `count`, `string` FROM `table` WHERE `count` == 1 GROUP BY `string`
Получили список строк, которые повторяются ровно 1 раз.

Если нужно убрать именно те, которые 2 раза, но оставить ... 3, 4, 5 раз:
SELECT count(*) AS `count`, `string` FROM `table` WHERE `count` != 2 GROUP BY `string`

Увы, сервера БД под рукой нет, так что решил описать всю логику на случай ошибок в синтаксисе...
<-------------- добавлено через 933 сек. -------------->
@funnywheel, ну, наверное, потому что это форум для Web-мастеров по большей части и хостинг с MySQL есть у всех...

А вот ставить Python на Windows не каждый будет :) Ну а дедиков и ВДСок с linux ни у всех имеется...
 
Зачем ради этого вообще париться с мускулем? о_О

Для просмотра ссылки Войди или Зарегистрируйся
<-------------- добавлено через 568 сек. -------------->
А вот ставить Python на Windows не каждый будет
Можно то-же самое сваять на похапэ или JS, просто питон для работы с текстом вроде как поприятнее.
А выполнить можно хоть в веб-морде repl.it, он у меня норм сейчас прожевал 3к строк на входе.

Да и на венду поставить питон проще, чем загнать в бд текстовик построчно =)
скачать экзешник -> далее -> далее -> далее -> ок
 
Excel - удалить дубликаты.
Или разбить файл на строки и создать массив. Это все для Python.
list = set()
 
При отсортированном списке в Notepad++
Найти
^(.*\r?\n)(\1)+
и заменить на пусто
фига се, даже подумать не мог, что в Notepad++ есть такая возможность.
Нужно будет обязательно протестировать.

^(.*\r?\n)(\1)+ - это и есть тот вид в котором нужно вносить регулярку???
регулярку - вбивать в строку поиска?? и как Notepad++ понимает что ему регулярку подсунули??
Спрашиваю по тому что нет скобок.
 
Назад
Сверху