- Linux удаление дубликатов строк
- Команда Linux/Unix: uniq – удаляет дубликаты строк
- название
- конспект
- Описание
- Смотрите также
- Удалить повторяющиеся строки из файла
- Вы можете быть заинтересованы
- 27 комментариев, оставьте свой
- Оставьте свой комментарий Отменить ответ
- Linux удаление дубликатов строк
- Удаление повторяющихся строк при помощи uniq
- Как удалить дубликаты строк внутри текстового файла?
Linux удаление дубликатов строк
Подскажите алгоритм!
Необходимо при помощи команд bash или awk удалить повторяющиеся сочетания в файле след. вида:
39111 39112
39111 39114
39111 39123
39112 39111 *
39112 39113
39113 39112 *
.
39123 39111 *
файл может быть до 100 строк. *-ой пометил те комбинации которые необходимо удалить!
Оглавление |
|
Сообщения по теме | [Сортировка по времени, UBB] |
1. «Удаление повторяющихся строк (Bash или awk)» | |
Сообщение от madskull | |
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору |
2. «Удаление повторяющихся строк (Bash или awk)» | |
Сообщение от SerVnk | |
sort -u удалит мне повторяющиеся строчки, а мне необходимо избавиться от повторных сочетаний. Например: Источник Команда Linux/Unix: uniq – удаляет дубликаты строкназвание uniq – удалить повторяющиеся строки из отсортированного файла. конспект uniq [ ОПЦИЯ ] … [ ВХОД [ ВЫХОД ]] Описание Откажитесь от всех, кроме одной, последовательных идентичных строк из INPUT (или стандартного ввода), записав в OUTPUT (или стандартный вывод). Обязательные аргументы для длинных опций обязательны и для коротких опций. -c – граф Префикс строки по количеству вхождений. -d – повторил Печатайте только повторяющиеся строки. -D , – все повторяется [= delimit-method ] печатать все повторяющиеся строки. Delimit-method = -f – пропуском поля = N Избегайте сравнения первых N полей. -i – игнорируемых случай Игнорировать различия в случае при сравнении. -s – скип-символы = N Избегайте сравнения первых N символов. -u – уникальный Печатайте только уникальные строки. -w – чек-символы = N Сравните не более N символов в строках. – помощь Показать эту помощь и выйти. – версия Вывести информацию о версии и выйти. Поле – это пробел, затем непробельные символы. Поля пропускаются до символов. Смотрите также Полная документация для uniq поддерживается в виде руководства в формате Texinfo. Если на вашем сайте правильно установлены программы info и uniq , команда info uniq должна предоставить вам доступ к полному руководству. Источник Удалить повторяющиеся строки из файлаЯ составляю словарь наиболее часто используемых паролей, популярных или наиболее часто используемых пользователями (… Не спрашивайте, почему… ХАХАХА), для этого я беру текст из других словарей и т.д., но я оказываюсь в ситуации, когда есть много повторяющихся паролей, и мне нужно удалить повторяющиеся строки. То есть, например . у нас есть такой файл: pass.txt И его содержание: Asdasd Как видим, мы повторили «любовь«И»Asdasd«, Последнее 3 раза. Как удалить повторяющиеся строки? Сделать это просто с помощью этой команды: cat pass.txt | sort | uniq > pass-listos.txt Это создаст файл с именем pass-ready.txt который будет содержать: админ Команда ОЧЕНЬ проста .
Это так просто . Я только что обнаружил, что команда sort да, очень хорошо . но вместе с уник, они жемчужина искусства 😀 Надеюсь, вы мне помогли. Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь. Полный путь к статье: Из Linux » GNU / Linux » Удалить повторяющиеся строки из файла Вы можете быть заинтересованы27 комментариев, оставьте свойОставьте свой комментарий Отменить ответВы также можете использовать sort -u. Поздравляю с блогом, мне очень нравится! Да правильно. Добро пожаловать 😉 Проблема в том, что он меняет порядок слов, он работает . но в конечном итоге результат сильно отличается от оригинала по порядку (что, возможно, в некоторых случаях имеет значение) Да, действительно, это упорядочивает слова в алфавитном порядке, поэтому, если контент был нужен БЕЗ вариаций, это решение не идеальное. Не болтайте, а вдруг вам придет в голову не ставить команду сортировки? пожалуйста, подумайте еще немного и не пережевывайте все. cat pass.txt | uniq> pass-ready.txt не работает, я пробовал не работает, потому что «повторяющиеся» строки должны быть непрерывными это довольно полезно Очень хорошо! Простое и понятное решение. Мне нравятся такие вещи 🙂 спасибо ^ — ^ Здравствуйте! очень хорошо! Строки такие же, но в них есть пробелы и еще несколько символов . проверяет ли это одно и то же слово? или по строке? Я объясняю? Привет, Спасибо за комментарий ^ — ^ Спасибо тебе!! раньше оракулу требовалось час, чтобы удалить дубликаты . теперь с сортировкой кошек требуется 30 секунд !! Мне это нужно в PHP: S Уфф . Я PHP, я очень и очень невысокий, я не совсем программист 🙁 Для php есть array_unique (…) в официальной документации PHP, вы найдете много важных и эффективных функций. Что касается сортировки, то, если она вам не нужна, это не обязательно . Время выполнения и память тратятся. (за то, что сделано в посте) Вау !! словарь для грубой силы !! XD Очень хорошее сочетание sort с uniq! Мне очень помогло удаление повторяющихся строк. Комментарий Карлоса, несмотря на его высокомерие, недействителен. Он говорит использовать: cat pass.txt | uniq> pass-ready.txt однако предварительным условием uniq является упорядоченность файла. Вы должны были подумать об этом немного больше или узнать раньше. очень хорошо, ты сэкономил мне много времени, запустив мой bash awk ‘! array_temp [$ 0] ++’ pass.txt> pass-ready.txt Большое спасибо за ваш вклад! Хотя было бы здорово иметь возможность сделать его уникальным, не меняя порядок, но эй, простая и полезная команда! Спасибо, мне это очень помогло у меня есть это Как мне заставить его рисовать только дубликаты для каждого подписчика в файле и оставлять те, которые не дублируются в другом? абонент находится на позиции 23 (10 позиций) sort -u -k 1,1 File.txt> result.txt Это сортирует файл по первому полю 2020 и все еще работаем, большое вам спасибо! Bạn co thể hướng dẫn cách loại bỏ các dòng trùng lặp của nhiều текст файла в Linux или Windows được không? Cũng như trường hợp của bn, khi tôi tạo file từ iển vì tôi chia nội dung ra nên Có khá nhiều file và chắc chắn con nhiều dòng trùng lặp giữa Các file. Ví dụ: Файл 1 của tôi co 5 dòng, файл 2 co 15 dòng (co 2 dòng trùng lặp với Файл 1. Tôi muốn co kết quả, Файл 1 vẫn giữ nguyên 5 dòng, Файл 2, только 2 dòng giống, файл 1 . Источник Linux удаление дубликатов строкУдаление повторяющихся строк при помощи uniqПовторяющие строки не часто становятся проблемой, но иногда это так. И когда это происходит, требуется дополнительная работа для их отфильтровки. Утилита uniq в этом деле очень полезна. Посмотрите, как вы можете сэкономить свое время и избежать головной боли. После сортировки текстового файла вы можете заметить, что некоторые строки повторяются. Иногда эта повторяющаяся информация не нужна и может быть удалена для сохранения места на диске. Строки в файле не обязательно сортировать, но вы должны помнить, что uniq сравнивает строки по мере прочтения и удаляет только две или больше соседних строк. Следующие примеры показывают как это работает на практике: Happy Birthday to You! Happy Birthday to You! Happy Birthday Dear Tux! Happy Birthday to You! Happy Birthday Dear Tux! Happy Birthday to You! Happy Birthday to You! Happy Birthday to You! $ sort happybirthday.txt | uniq Happy Birthday Dear Tux! Happy Birthday to You! Помните, что это плохая идея — использовать uniq или другие утилиты для удаления повторяющихся строк в файлах, содержащих финансовую или другую важную информацию. В таких файлах повторяющиеся строки обозначают ещё один перевод денег на тот же счет и удаление их может привести к проблемам в отношениях с налоговыми органами. Не делайте этого! Что, если вы хотите сделать свою работу проще и вывести только уникальные или только повторяющиеся строки из файла? Вы можете сделать это при помощи опций -u (unique) и -d (duplicate): $ sort happybirthday.txt | uniq -u Happy Birthday Dear Tux! $ sort happybirthday.txt | uniq -d Happy Birthday to You! Вы можете также получить некоторую статистику при помощи опции -c: $ sort happybirthday.txt | uniq -uc 1 Happy Birthday Dear Tux! $ sort happybirthday.txt | uniq -dc 3 Happy Birthday to You! Сравнение целых строк очень полезно, но это — не последняя возможность этой команды. Очень хороша возможность пропускать указанные при помощи опции -f поля. Это может пригодиться при просмотре системных логов. Использование простой uniq не будет работать, так как каждая строка имеет свою отметку времени. Но если вы укажете uniq пропустить все поля времени, то, неожиданно, ваш лог станет гораздо более понятным. Попробуйте uniq -f 3 /var/log/messages и убедитесь сами. Есть еще одна опция -s, которая работает так же, как и -f, но пропускает указанное количество символов. Вы можете использовать -s и -f вместе. Сначала удалите поля, а затем символы. А что, если вы захотите увидеть строки, только с данными символами? Попробуйте опцию -w. Источник Как удалить дубликаты строк внутри текстового файла?Огромный (до 2 ГиБ) мой текстовый файл содержит около 100 точных дубликатов каждой строки в нем (в моем случае это бесполезно, поскольку файл представляет собой таблицу данных, похожую на CSV). Что мне нужно, так это удалить все повторения, при этом (желательно, но этим можно пожертвовать ради значительного повышения производительности), сохраняя первоначальный порядок последовательности. В результате каждая строка должна быть уникальной. Если было 100 одинаковых строк (обычно дубликаты распределяются по файлу и не будут соседями), остается только один из них. Я написал программу на Scala (рассмотрим Java, если вы не знаете о Scala), чтобы реализовать это. Но, может быть, есть более быстрые собственные инструменты, написанные на C, способные сделать это быстрее? ОБНОВЛЕНИЕ: awk ‘!seen[$0]++’ filename решение, казалось, работало очень хорошо для меня, пока файлы были около 2 ГБ или меньше, но теперь, когда я собираюсь очистить файл 8 ГБ, оно больше не работает. Кажется, что бесконечность на Mac с 4 ГБ ОЗУ и 64-битном ПК с Windows 7 с 4 ГБ ОЗУ и подкачкой 6 ГБ просто не хватает памяти. И я не испытываю энтузиазма по поводу того, чтобы попробовать это на Linux с 4 ГБ RAM, учитывая этот опыт. awk Решение видно на #bash (Freenode): Существует простой (не сказать очевидный) метод, использующий стандартные утилиты, который не требует большого объема памяти, кроме как для запуска sort , который в большинстве реализаций имеет специфические оптимизации для больших файлов (хороший алгоритм внешней сортировки). Преимущество этого метода в том, что он зацикливается только на всех строках внутри специальных утилит, а не внутри интерпретируемых языков. Если все строки начинаются с непробельного символа, вы можете обойтись без некоторых параметров: Для большого количества дублирования метод, который требует только сохранения одной копии каждой строки в памяти, будет работать лучше. С некоторыми дополнительными интерпретациями для этого есть очень лаконичный сценарий awk (уже опубликованный enzotib ): Менее сжато: !seen[$0] Для длинных строк вы можете сэкономить память, сохраняя только несанкционированную контрольную сумму (например, криптографический дайджест) каждой строки. Например, используя SHA-1, вам нужно всего 20 байтов плюс постоянные издержки на строку. Но вычисление дайджестов происходит довольно медленно; Этот метод выиграет, только если у вас быстрый ЦП (особенно с аппаратным ускорителем для вычисления дайджестов) и не достаточно памяти относительно размера файла и достаточно длинных строк. Никакая базовая утилита не позволяет вычислить контрольную сумму для каждой строки; вам придется нести ответственность за интерпретацию Perl / Python / Ruby /… или написать специальную скомпилированную программу. Источник |