LINUX.ORG.RU

Удаление повторяющихся строк вместе с дубликатами

 , ,


1

3

Здравствуйте, форумчане. У меня возникла потребность в удалении из файла всех повторяющихся строк. Задача - есть 2 файла, например 1.txt содержит:

a1 a2 a3 a4 a5 a6

2.txt содержит:

а3 а6

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

a1 a2 a4 a5

Без самих дубликатов. К примеру sort -u и uniq удалит только 1 экземпляр повторяющихся строк. Как сделать так как показанно в примере?

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

Предложенный в ней вариант хорошо справляется с небольшим количеством строк, но у меня в 1.txt строк всего лишь 46508... Так понимаю, что из-за величины файла приведенное решение не срабатывает?

Подскажите, пожалуйста, какой командой победить мою задачу?


Нормальный там вариант описан.
Что и как именно не срабатывает не говорите, я сейчас догадаюсь

zolden ★★★★★
()

Предложенный в ней вариант хорошо справляется с небольшим количеством строк, но у меня в 1.txt строк всего лишь 46508... Так понимаю, что из-за величины файла приведенное решение не срабатывает?

Если медленно, то можно попробовать добавить ещё флаг -F, раз там строки, а не регулярные выражения.

xaizek ★★★★★
()
Ответ на: комментарий от zolden

Отличный вариан там описан и с 12 строками он сработал, а с 46508 строк в 1.txt и 266 в 2.txt ничего не меняет...

a35b62
() автор топика
Ответ на: комментарий от xaizek

Добавлял - та же песня... увы.. В той теме есть вариант и с -F

a35b62
() автор топика
Ответ на: комментарий от exception13

К сожалению не знаю ни sqlite ни python... Я обычный пользователь... ну может капельку не обычный...

a35b62
() автор топика
Ответ на: комментарий от exception13

загнать в sqlite например.

В Coreutils есть специальная утилита именно для этого. Её и в том треде упоминали и в этом. Но это сообщение игнорируют и продолжают жрать кактус. Нафига тут sqlite?

comm -3 <(sort 1.txt) <(sort 2.txt)

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)

это вас один и тот же преподаватель учит?

все-таки нужно удалить дубликаты строк или удалить из 1.txt все, что встречается в 2.txt? это немного разные постановки задачи.

в первом случае не понятно, зачем вообще нужно два файла
во втором случае тебе нужен comm(1) или join(1)

maloi ★★★★★
()
Ответ на: комментарий от a35b62

Тебе уже четыре раза в теме намекнули на правильное решение. В теме, которая висит в похожих это решение тоже упоминалось. Почему ты тыкаешь всё остальное кроме рабочего решения?

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)
Ответ на: комментарий от maloi

Меня после 9 класса никто не учил...

Просто это был последний пост с предложением, которое сработало... а я уже перерыл их кучу... даже третий файл есть в котором содержимое 1 и 2... и даже повторяющиес ст роки парой стоят...

Только никакая команда так и не удалило лишнее ни с 1 и 2 файлами ни 3 файл от дубликатов не спасло...

a35b62
() автор топика
Ответ на: комментарий от Xenius

мало ли какие еще операции над множеством в дальнейшем потребуется сделать этому товарищу.

exception13 ★★★★★
()
Ответ на: комментарий от a35b62

Всем спасибо за помощь и критику :)

Но почему ты так и не ответил на мои сообщения? Я тебе дал команду которая должна была работать, причём указал на нужный man первым же сообщением. Если она не сработала, так бы и сказал, может ты что-то не так сделал сам...

Xenius ★★★★★
()
Ответ на: комментарий от a35b62

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

maloi ★★★★★
()
Ответ на: комментарий от a35b62

команды

comm -3 1.txt 2.txt 
join -v 1 1.txt 2.txt
решают твою задачу на ура

maloi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.