The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Помогите удалить повторяющиеся строки"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Помогите удалить повторяющиеся строки"  +/
Сообщение от mintolikemail (?), 13-Май-18, 01:33 
Есть файл, в нём постоянно повторяются строки. Необходимо удалить повторяющиеся строки, но без сортировки списка.
$ sort file.txt| uniq -u > sort.txt - не подходит, так как я не хочу сортировать текст. Мне нужно лишь избавиться от повторяющихся строк.

Заранее благодарю за помощь.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Помогите удалить повторяющиеся строки"  +/
Сообщение от михалыч (ok), 13-Май-18, 07:03 
> Есть файл, в нём постоянно повторяются строки. Необходимо удалить повторяющиеся строки,
> но без сортировки списка.
> $ sort file.txt| uniq -u > sort.txt - не подходит, так как
> я не хочу сортировать текст. Мне нужно лишь избавиться от повторяющихся
> строк.
> Заранее благодарю за помощь.

Пожалуйста.

perl -e 'for(`cat file.txt`){print unless $s{$_}++}'

или так
perl -e '@u=grep{\!$s{$_}++} `cat file.txt`; print @u'

в FreeBSD знак "!" приходится экранировать
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Помогите удалить повторяющиеся строки"  +4 +/
Сообщение от Andrey Mitrofanov (?), 13-Май-18, 08:01 
>> Заранее благодарю за помощь.
> Пожалуйста.
>
perl -e 'for(`cat file.txt`){print unless $s{$_}++}'

|awk '!x[$0]++'

:))))  Прямо сам себя боюсь.

> или так

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Помогите удалить повторяющиеся строки"  +1 +/
Сообщение от михалыч (ok), 13-Май-18, 08:18 
> |awk '!x[$0]++'
> :))))  Прямо сам себя боюсь.

а не надо бояться человека с   ̶р̶у̶ж̶ь̶ё̶м̶ мечом!
(ну мастер ты, мастер - меча, ну в смысле awk'а, виртуоз однако!)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Помогите удалить повторяющиеся строки"  +/
Сообщение от PereresusNeVlezaetBuggy (ok), 14-Май-18, 10:29 
>>> Заранее благодарю за помощь.
>> Пожалуйста.
>>
perl -e 'for(`cat file.txt`){print unless $s{$_}++}'

> |awk '!x[$0]++'

Реально круто.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Andrey Mitrofanov (?), 14-Май-18, 11:17 
>>>
perl -e 'for(`cat file.txt`){print unless $s{$_}++}'

>> |awk '!x[$0]++'
> Реально круто.

Пасиб.  Но я тут подумал, что "вынужден ёё повторять" -- нашёл ссылку с "прецедентом".  :-D

Хотя "мускул"[/вывих?] мозга для такого повторения тож сам по себе достижение.

| https://duckduckgo.com/?q=%22uniq%22+%D0%...
|
2015-03-30  https://unix.stackexchange.com/a/193331
  + " Strictly speaking, !a[$0]++ is not equal to uniq, because uniq requires input data sorted. "

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Помогите удалить повторяющиеся строки"  –9 +/
Сообщение от Pahanivo (ok), 15-Май-18, 16:04 
> Необходимо удалить повторяющиеся строки, но без сортировки списка.
> $ sort file.txt| uniq -u > sort.txt - не подходит, так как
> я не хочу сортировать текст. Мне нужно лишь избавиться от повторяющихся
> строк.

юник без сорта предлагали?

> cat file

1
2
3
4
5
6
6
7
8
8
9

> cat file | uniq

1
2
3
4
5
6
7
8
9

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Помогите удалить повторяющиеся строки"  +4 +/
Сообщение от Аноним (-), 16-Май-18, 08:13 
> юник без сорта предлагали?

cat file

9
7
1
2
3
4
1
5
6
6
7
8
2
8
9

cat file | uniq

9
7
1
2
3
4
1
5
6
7
8
2
9

Хмм.. Что-то пошло не так!..

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Помогите удалить повторяющиеся строки"  –8 +/
Сообщение от Pahanivo (ok), 16-Май-18, 10:10 
что именно? повторяющиеся строки удалились.
или у меня чтой то с глазами?
> Необходимо удалить повторяющиеся строки, но без сортировки списка.

Афтар как всегда швырнул нечеткую задачу и свалил, а все дружно набежали подрочи^Wпофантазировать над условием, и соответственно над решением? :)

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

9. "Помогите удалить повторяющиеся строки"  +2 +/
Сообщение от Аноним (-), 16-Май-18, 10:28 
> что именно? повторяющиеся строки удалились.
> или у меня чтой то с глазами?
>> Необходимо удалить повторяющиеся строки, но без сортировки списка.
> Афтар как всегда швырнул нечеткую задачу и свалил

Нет. Там все "четко" и понятно.

> или у меня чтой то с глазами?

Да. "чтой то".

Ещё раз.
Простой тест на вниательность.

cat file
1
2
3
4
5
6
5
7
8
8
9

cat file | uniq
1
2
3
4
5
6
5
7
8
9

cat file | awk '!x[$0]++'
1
2
3
4
5
6
7
8
9


Найти отличие.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Помогите удалить повторяющиеся строки"  +1 +/
Сообщение от Andrey Mitrofanov (?), 16-Май-18, 10:42 
>> Афтар как всегда швырнул нечеткую задачу и свалил
> Нет. Там все "четко" и понятно.

Нет да, там всё двояко, как минимум: "удалить повторяющиеся строки" == повторяющиеся в _где_? Во всём файле(*) - первые решения, дружка за дружкой - твой uniq заход.

(*) и да, для нас, прохвессионалов скрокаудалянинга с седыми бОродами, _совершенно_ очевидно, что напрягаться, решать и показывать свой прохвеонализьм имеет смысл только с _более_ сложным "первым" вариантом. Ищущие лёгких путей "молодые ногти", да ещё с важным видом указывающие нам, как именно мы не правы....  невоспитаны и хамят старшим!

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Помогите удалить повторяющиеся строки"  –1 +/
Сообщение от Всем Сосать (ok), 17-Май-18, 15:47 
> Прямо сам себя боюсь.

May 10 '14 at 12:05 https://unix.stackexchange.com/questions/128775/fastest-uniq...

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

12. "Помогите удалить повторяющиеся строки"  +1 +/
Сообщение от Andrey Mitrofanov (?), 17-Май-18, 17:42 
Всем Сосать, 15:47 , 17-Май-18, (11)

>> Прямо сам себя боюсь.
>  May 10 '14 at 12:05 https://unix.stackexchange.com/questions/128775/fastest-uniq...

Andrey Mitrofanov, 11:17 , 14-Май-18, (5)  http://www.opennet.ru/openforum/vsluhforumID9/10226.html#5

14ый, 15ый... Впрочем, победил.  Но опоздал.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Помогите удалить повторяющиеся строки"  –1 +/
Сообщение от Аноним (-), 17-Май-18, 18:31 
> Всем Сосать, 15:47 , 17-Май-18, (11)
>>> Прямо сам себя боюсь.
>>  May 10 '14 at 12:05 https://unix.stackexchange.com/questions/128775/fastest-uniq...
> Andrey Mitrofanov, 11:17 , 14-Май-18, (5)  http://www.opennet.ru/openforum/vsluhforumID9/10226.html#5
> 14ый, 15ый... Впрочем, победил.  Но опоздал.

хы, :видимо там тоже -- "чтой то с глазами" :)

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Помогите удалить повторяющиеся строки"  –5 +/
Сообщение от Pahanivo (ok), 18-Май-18, 15:33 
> Найти отличие.

я довольно легко решаю детские задачи ...
но в итоге были не "удалены повторяющиеся строки", а "оставлены уникальные"
ПыСы: теперь дорогие друзья ваша очередь проявить внимание и найти отличия в выделенных фразах. ИМХО на мой взгляд это несколько другая задача.
ПыСы.v.2.0: кнопка для минусов в правом верхнем углу поста.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

15. "Помогите удалить повторяющиеся строки"  –1 +/
Сообщение от Аноним (-), 19-Май-18, 06:58 
> я довольно легко решаю детские задачи ...

Это не так.

> но в итоге были не "удалены повторяющиеся строки", а "оставлены уникальные"

Но "нужно лишь избавиться от повторяющихся строк"

Итог - задача не решена.


Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

16. "Помогите удалить повторяющиеся строки"  –7 +/
Сообщение от Pahanivo (ok), 19-Май-18, 11:44 
> Итог - задача не решена.

мда, какая именно задача не решена?
удаление повторов или поиск уникальных? афтар просил повторы, если чо.

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

17. "Помогите удалить повторяющиеся строки"  –1 +/
Сообщение от Анонм (?), 19-Май-18, 13:12 
>> Итог - задача не решена.
> мда, какая именно задача не решена?
> удаление повторов или поиск уникальных? афтар просил повторы, если чо.

Не считайте других глупее вас. "Афтара" в том числе.

Очевидно, что ТС нужно удалить из списка все повторяющиеся строки.
Неважно, где они находятся и в какой последовательности.

Важно, чтобы не было одинаковых строк. Уникальные они или нет - не имеет значения.
Но важно другое, ТС точно нужно, чтобы в файле не было сортировки,
чтобы порядок и последовательность строк не была нарушена и не было эквивалентных (равных) строк.

И с uniq и с sort ТС очевидно знаком.
В своём первом сообщении он как раз и показывает, что применив сортировку sort,
а потом uniq он получает не совсем то, что он хочет получить и что ему нужно.

Он удаляет все повторы - для этого он и применяет сортировку.
uniq режет потом лишнее. Но первоначальная сортировка строк уже нарушена.

ТС показывает тем самым свои попытки самостоятельно решить задачу.
Неужеле же он не мог сразу применить uniq ??
Конечно же мог. Но это не решит его проблему. Одинаковые строки останутся.

А как сделать, чтобы убрать повторы, но не менять порядок строк в файле - сам ТС не решил.
Поэтому и обратился на форум за помощью.

Печально, что приходится разжёвывать столь очевидные факты.

Не стоит дальше упорствовать.
Нужно уметь признавать свои ошибки.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

18. "Помогите удалить повторяющиеся строки"  –5 +/
Сообщение от Pahanivo (ok), 19-Май-18, 22:30 
> Не считайте других глупее вас. "Афтара" в том числе.

людей глупея себя я всегда буду считать глупее себя - увы.
у меня только один вопрос: почему альтернативная точка зрения вызывает такой батхерт, ИМХО необоснованный.
лично я считаю это самым явным воинствующим долбое^Wмом ...

> Очевидно, что ТС нужно удалить из списка все повторяющиеся строки.

Простите великодушно, из каких соображения это очевидно?
Афтар лишь брякнул "постоянно повторяются", не уточнив что он под этим подразумевал.
> Неважно, где они находятся и в какой последовательности.

мусье не удосужится пояснить с чего се следует?

> Важно, чтобы не было одинаковых строк.
> Уникальные они или нет - не имеет значения.

мусье, извините, но если удалить из файла все повторяющиеся строки, в контексте всего файла, - там как раз и останутся таки уникальные.

Будоражим фантазию дальше, это так занимательно!
Кнопка для минусов все там же, ага.
ПЫСЫ: а по поводу "афтар делал какие то там потуги в консоли", дак щас столько макак которые копипастят команды в консоли, не понимая как они в принципе работают. тем паче что он даже пример кинуть не соизволил.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Pahanivo (ok), 20-Май-18, 22:23 
>
perl -e 'for(`cat file.txt`){print unless $s{$_}++}'

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

21. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Аноним (-), 21-Май-18, 10:12 
> а если файл больше чем память?

А если дождик в засушку?
а если, а если...изворотливый фантазёр

> хоть бы хеш строк считали, а там всю строку запихивать ... ппц
> конечно

Критикуя - предлагай!
А хотя нет - уже.
> юник без сорта предлагали?

Не то также скажут, что у меня "чтой то с глазами".

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

22. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Andrey Mitrofanov (?), 21-Май-18, 10:32 
> а если файл больше чем память?
> хоть бы хеш строк считали, а там всю строку запихивать ... ппц
> конечно

А если ты сам решил упрощённую для себя любимого постановку задачи - uniq-ом, а для решивших более сложную постановку решил ещё поусложнять?

В принципе, да, согласен!  Оттачивать мастерство можно и на одноразовом  однострочнике, прикручивая к нему хеши, БД, внешнюю сортировку и де-сортировку...  Подбираешь для себя новую более мАстерскую постановку?

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

23. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Pahanivo (ok), 21-Май-18, 11:10 
> В принципе, да, согласен!  Оттачивать мастерство можно и на одноразовом  
> однострочнике, прикручивая к нему хеши, БД, внешнюю сортировку и де-сортировку...  
> Подбираешь для себя новую более мАстерскую постановку?

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

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

24. "Помогите удалить повторяющиеся строки"  –1 +/
Сообщение от Аноним (-), 21-Май-18, 12:28 
Шо, опять?

> людей глупея себя я всегда буду считать глупее себя - увы.

Новый оборот речи - "глупея себя". Может всё же "глупее"?
Хотя нет. Именно "глупея". Не по дням, а по часам.


> у меня только один вопрос: почему альтернативная точка зрения вызывает такой батхерт,
> ИМХО необоснованный.

Обоснованный.

Хе-хе.. у кого что болит - тот о том и говорит.
Очевидно же, что у вас явно подгорает в одном месте и "рвёт пукан".

Вы так стараетесь сделать хорошую мину при плохой игре,
и убедить окружающих в своей правоте - это явно говорит о вашей пристрастности.

Почему? Да потому, что в глубине души вы прекрасно понимаете и осознаёте,
что облажались со своим советом. Но признать это - это выше ваших сил. Не можете.
Ошибиться может любой. Это не страшно. Но признавать свои ошибки может не каждый.

Поэтому вы и пристрастны. И все у вас виноваты.
И ТС -
> Афтар как всегда швырнул нечеткую задачу и свалил

"Афтар как всегда" - плохому танцору всегда что-то мешает.

И остальные без вины виноваты -
> все дружно набежали подрoчи^Wпофантазировать над условием, и соответственно над решением

У вас, что, комплекс неполноценности на эту тему?

>> Очевидно, что ТС нужно удалить из списка все повторяющиеся строки.
> Простите великодушно, из каких соображения это очевидно?

Если вы этого не видите - то у вас действительно "чтой то с глазами".

Мне понятно ваше желание и стремление выделиться и повыпендриваться.
Ну как же. Все тут тужатся, чего-то там изображают, придумывают.
И тут выхожу я, весь в таком белом. Что, бл.! Не ждали?
А я - вот он, нарисовался - .уй сотрёшь!
> юник без сорта предлагали?

"Афтар" "юник" вначале ещё пробовал. Но мы же этого не замечаем, мы не видим.
Потому что он его с "сортом" пробовал. А без "сорта" "афтар" не сможет. Не догадается.
Он же "глупея" меня.

> Афтар лишь брякнул "постоянно повторяются", не уточнив что он под этим подразумевал.

Заметьте, как вы выражаетесь - "афтар", "брякнул".
Хорошие манеры? Не, не слышал. Да, это не про вас. А жаль.

>> Неважно, где они находятся и в какой последовательности.
> мусье не удосужится пояснить с чего се следует?
>> Важно, чтобы не было одинаковых строк.
>> Уникальные они или нет - не имеет значения.
> мусье, извините, но если удалить из файла все повторяющиеся строки, в контексте
> всего файла, - там как раз и останутся таки уникальные.
> Будоражим фантазию дальше, это так занимательно!
> Кнопка для минусов все там же, ага.

Да, в курсе. И минусуют вам за твердолобость и упёртость.
За нежелание признавать свои просчёты.

> ПЫСЫ: а по поводу "афтар делал какие то там потуги в консоли",
> дак щас столько макак которые копипастят команды в консоли, не понимая
> как они в принципе работают. тем паче что он даже пример
> кинуть не соизволил.

Ну, что же. Ждём очередную "гнилую отмазку" в стиле - какие
"Все вокруг нехорошие, один я Дартаньян".
Давай дальше, жги. Набрасывай, маленький, завистливый и злобный троль.


Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

25. "Помогите удалить повторяющиеся строки"  –2 +/
Сообщение от Pahanivo (ok), 21-Май-18, 21:28 
эко бомбануло, я прямо вижу забрызганный слюнями в хлам монитор :)

> Необходимо удалить повторяющиеся строки, но без сортировки списка.

Ок. Попробую на пальцах.
Есть три строки:
3
3
3

В каждой по одному символу, первая строка "3", затем идут ДВА ПОВТОРЕНИЯ (строки повторяются, повторяющиеся строки, ИСХОДНАЯ строка дважды повторяется).
Имеем формулировку: "удалить повторяющиеся". Самое время определится что такое "повторяющиеся". Я считаю, что повторяющиеся это ВТОРАЯ и ТРЕТЬЯ строки. Но код "sort | uniq -u" грохнет все три строки.
Это я к тому, что "афтар там пытался потужится в шеле, и вообще все и так понятно", но лично я уже вижу противоречие, и мне задача неясна. Но при этом он пишет, что его не у страивает только сортировка.

Еще пример "удалить повторяющиеся":
1
2
3
2
2
4
2

Дак что же является "повторяющимися строками" подлежащими удалению в данном примере?
1) Ваше решение грохнет все строки "2", кроме 2й.
2) Афтар своим "sort | uniq -u" грохнет все строки "2" (его не устраивает только сортировка, афтар же пытался)
3) А если считать что повторения это не в контексте всего файла, а только последовательные - то вообще грохнуть надо 5ю строку.

А теперь, мой анонимный друг, прекрати заниматься анонимизмом, и просто для себя выбери вариант, и самое главное, обоснуй выбор (пукан не забудь только подвязать, а то опять порвет).

ПыСы: а по поводу упертости: этож надо было столько раз зайти чтобы минусов понаставить, анонимы такие анонимы :)

Ответить | Правка | ^ к родителю #24 | Наверх | Cообщить модератору

26. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Pahanivo (ok), 24-Май-18, 10:43 
Аноним, ты определился?

Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

28. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Аноним (28), 10-Июл-18, 19:20 
Вообще uniq без sort, но могли бы свой юник переизобрести, например

while read -r l ; do [ "$l" != "$p" ] && echo "$l" ; p="$l" ; done

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

29. "Помогите удалить повторяющиеся строки"  +2 +/
Сообщение от iklingen (ok), 26-Июл-18, 21:16 
Идея для большого количества строк данных:
1) к исходному файлу добавляем нумерацию строк (индексы) как некоторое поле, например в первых нескольких позициях:

$cat file
7
5
2
7
2
0
3
1
2
3
4
5
0
8
4
2


$cat -n file
     1    7
     2    5
     3    2
     4    7
     5    2
     6    0
     7    3
     8    1
     9    2
    10    3
    11    4
    12    5
    13    0
    14    8
    15    4
    16    2

2) сортируем по данным с удалением дублей:

$cat -n file | sort -u -k 2
     6    0
     8    1
     3    2
     7    3
    11    4
     2    5
     1    7
    14    8

3) теперь сортируем по номерам строк/индексам:

$cat -n file | sort -u -k 2 | sort -n
     1    7
     2    5
     3    2
     6    0
     7    3
     8    1
    11    4
    14    8

4) и убираем индексы:

$cat -n file | sort -u -k 2 | sort -n | cut -f2
7
5
2
0
3
1
4
8

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

30. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Pahanivo (ok), 27-Июл-18, 10:19 
еще один любитель решать задачи без условий?
Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

31. "Помогите удалить повторяющиеся строки"  +/
Сообщение от iklingen (ok), 27-Июл-18, 20:11 
> еще один любитель решать задачи без условий?

В реальности, чаще всего, условия еще более расплывчаты. Так что, нормально...

Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

32. "Помогите удалить повторяющиеся строки"  +/
Сообщение от Pahanivo (ok), 28-Июл-18, 23:16 
> В реальности, чаще всего, условия еще более расплывчаты. Так что, нормально...

В добрый путь :)
Дату только смотреть не забываем ...

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру