Оставить дубликаты (трипликаты и т. д.) строк

Автор PiVV, 28 июня 2010, 18:47

0 Пользователи и 1 гость просматривают эту тему.

PiVV

Есть простой текстовый файл. На каждой строке отдельное слово. Строки отсортированы. Среди строк встречаются повторы. Необходимо оставить в файле только повторяющиеся два и более раз строки. Можно из них оставить одну, а можно оставить такое же количество как в исходном файле.

[вложение удалено Администратором]

bormant

#1
$ uniq -d next.txt
UPD: 222 повтора

[вложение удалено Администратором]
Автору на яд. Поддержать форум.

dr.Faust

Сначала уберём абзацы.
Найти: "$"
Заменить: " "

Дальше мы могли бы найти все повторы так: "# ([:alpha:]+)( # \1)+ #"
Но выражение это почему-то не находит повторы... Вообще говоря нечто навроде "([:alpha:]+) " находит только слова "лев " и "деньги " из строки "лев (деньги Болгарии)" мжно сказать что поиск сломалия?
Свобода информации - свобода личности!

dr.Faust

2 bormant
Я так понимаю ТС хочет это сделать средствами ООо?
Вдруг у него винда?
Свобода информации - свобода личности!

bormant

#4
1. Судя по разделу форума, ТС нужно это просто сделать.
2. CygWin/UnxUtils/gnuwin32 винде не помеха.
Автору на яд. Поддержать форум.

PiVV

#5
2 bormant
Мне казалось uniq как раз удаляет дубликаты строк. Мне же нужно те строки, которые уникальные - удалить вообще и оставить только дублирующиеся.
[Добавлено]
Ага, так ключик -d как раз и оставляет только дубликаты.

Ну да, мне это просто нужно сделать (надоело делать это вручную, кроме того можно что-то пропустить). Если бы это был sed-скрипт было бы вообще хорошо.

bormant

Автору на яд. Поддержать форум.

PiVV

Спасибо, вложение не заметил. Мелко всё на нетбуке.

PiVV

Не сочтите за рекламу. Нашёл uniq для Windows. Результат работы совпадает с результатом bormant-а.

VlhOwn


dr.Faust

Цитата: bormant от 28 июня 2010, 18:22Судя по разделу форума, ТС нужно это просто сделать.
Не обратил внимание на раздел...

А что же кстати с
Цитата: dr.Faust от 28 июня 2010, 18:16Дальше мы могли бы найти все повторы так: "# ([:alpha:]+)( # \1)+ #"
Я ошибся или ООо? Кто-нибудь может проверить?
Свобода информации - свобода личности!

VlhOwn

Все работает, но последняя "решетка" лишняя.
А в приведенном примере про болгарский лев - в конце выражения у тебя пробел, т.е. Болгарии) не сопоставляется.

dr.Faust

Я наверное не так выразился.
"([:alpha:]+) " - находит ТОЛЬКО эти два слова! Хотя должен находить ВСЕ.
Болгария тут не при чём - понятно, что она не подпадает под маску. Но все отстальные-то подпадают...
Так и первое выражение, даже без решёток по бокам ни находит ничего.
Свобода информации - свобода личности!

Рыбка Рио

"[:alpha:].+" найдёт.

"[:alpha:]+" ищет только буквы.
ubuntu 12.04 + LibO3.6.0

VlhOwn

Специально показал случай, когда больше 2-х слов. Образец заканчивается пробелом.

[вложение удалено Администратором]