- Удалить повторяющиеся строки из файла
- Вы можете быть заинтересованы
- 27 комментариев, оставьте свой
- Оставьте свой комментарий Отменить ответ
- Linux удалить дублирующиеся строки
- Удаление повторяющихся строк при помощи uniq
- Как я могу удалить дубликаты в моем .bash_history, сохраняя порядок?
- Дополнительный кредит:
- Сортировка истории
- Управление .bash_history
- Команда Linux/Unix: uniq – удаляет дубликаты строк
- название
- конспект
- Описание
- Смотрите также
Удалить повторяющиеся строки из файла
Я составляю словарь наиболее часто используемых паролей, популярных или наиболее часто используемых пользователями (… Не спрашивайте, почему… ХАХАХА), для этого я беру текст из других словарей и т.д., но я оказываюсь в ситуации, когда есть много повторяющихся паролей, и мне нужно удалить повторяющиеся строки.
То есть, например . у нас есть такой файл: pass.txt
И его содержание:
Asdasd
Лола
любовь
Asdasd
окна
админ
Linux
Asdasd
любовь
Как видим, мы повторили «любовь«И»Asdasd«, Последнее 3 раза. Как удалить повторяющиеся строки?
Сделать это просто с помощью этой команды:
cat pass.txt | sort | uniq > pass-listos.txt
Это создаст файл с именем pass-ready.txt который будет содержать:
админ
Asdasd
Linux
Лола
любовь
окна
Команда ОЧЕНЬ проста .
- кошка pass.txt — »Перечислить содержимое файла.
- sort — »Сортировать содержимое по алфавиту.
- уник — »Устранение повторяющихся строк.
- > pass-ready.txt — »Результат предыдущей команды поместите в файл pass-ready.txt (который, поскольку его не существует, создаст его)
Это так просто . Я только что обнаружил, что команда sort да, очень хорошо . но вместе с уник, они жемчужина искусства 😀
Надеюсь, вы мне помогли.
Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.
Полный путь к статье: Из Linux » GNU / Linux » Удалить повторяющиеся строки из файла
Вы можете быть заинтересованы
27 комментариев, оставьте свой
Оставьте свой комментарий Отменить ответ
Вы также можете использовать sort -u.
Поздравляю с блогом, мне очень нравится!
Да правильно.
Ничего, большое спасибо за комментарий 😀
Добро пожаловать 😉
привет
Проблема в том, что он меняет порядок слов, он работает . но в конечном итоге результат сильно отличается от оригинала по порядку (что, возможно, в некоторых случаях имеет значение)
Да, действительно, это упорядочивает слова в алфавитном порядке, поэтому, если контент был нужен БЕЗ вариаций, это решение не идеальное.
Не болтайте, а вдруг вам придет в голову не ставить команду сортировки? пожалуйста, подумайте еще немного и не пережевывайте все.
cat pass.txt | uniq> pass-ready.txt
не работает, я пробовал
не работает, потому что «повторяющиеся» строки должны быть непрерывными
это довольно полезно
Очень хорошо! Простое и понятное решение. Мне нравятся такие вещи 🙂
Я должен признать, что сделал бы что-нибудь на Python, но это решение в порядке.
спасибо ^ — ^
Здравствуйте! очень хорошо!
У меня вопрос пожалуйста
это сработает для меня в следующем примере:
ABCD 1111
DEFG 2222 45455
ABCD 1111
DEFG 2222
Строки такие же, но в них есть пробелы и еще несколько символов . проверяет ли это одно и то же слово? или по строке? Я объясняю?
с этого момента я вам большое спасибо.
Объятие
Привет,
Как я видел, при этом сравниваются строки, а не столбцы, поэтому в примере, который вы мне даете, это приведет к удалению либо 1-й строки, либо 3-й, 2-й и 4-й строк, хотя они почти идентичны, они не идентичны на 100%, потому что у них есть столбец разницы. 😉
Спасибо за комментарий ^ — ^
Спасибо тебе!! раньше оракулу требовалось час, чтобы удалить дубликаты . теперь с сортировкой кошек требуется 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
при этом линии удаляются без заказа.
Большое спасибо за ваш вклад!
Хотя было бы здорово иметь возможность сделать его уникальным, не меняя порядок, но эй, простая и полезная команда!
Спасибо, мне это очень помогло
у меня есть это
С 000006158880201502051056088364 C00-06158880
С 000007601673201503051056088364 C00-07601673
С 000008659304201504051056088364 C00-08659304
Т 0809074070562015120818144287185REAÑO RUBIOS EMILIA DORIS
Т 0809092979972016010818144287185REAÑO RUBIOS EMILIA DORIS
С 000005398451201501231044214375 C00-05398451
С 000007674996201503051000000286 C00-07674996
С 000008514288201504051000000463 C00-08514288
С 000011613498201506051056088070 C00-11613498
Как мне заставить его рисовать только дубликаты для каждого подписчика в файле и оставлять те, которые не дублируются в другом?
абонент находится на позиции 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 .
Như bạn biết co nhiều li do chúng ta ko thể gộp các file txt đó lại với nhau, vì những file text từ điển rất ư là nhiều ký, chẳng hạn như Rockyou. Это то, что мы думаем, это то, что я не знаю, как это сделать в Windows, вам нужно, чтобы вы чувствовали себя виноватыми в Windows. 🙂 Hy vọng nhận được phản hồi từ bạn!
Источник
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.
Источник
Как я могу удалить дубликаты в моем .bash_history, сохраняя порядок?
Я действительно наслаждаюсь control+r рекурсивным поиском в моей истории команд. Я нашел несколько хороших вариантов, которые мне нравится использовать с ним:
Единственная проблема для меня состоит в том, что erasedups стираются только последовательные дубликаты — так что с этой строкой команд:
Команда ls будет записана дважды. Я думал о периодическом запуске w / cron:
Это приведет к удалению дубликатов, но, к сожалению, порядок не будет сохранен. Если я sort сначала не верну файл, я не верю, что он uniq может работать должным образом.
Как я могу удалить дубликаты в моем .bash_history, сохраняя порядок?
Дополнительный кредит:
Есть ли проблемы с перезаписью .bash_history файла через скрипт? Например, если вы удалите файл журнала apache, я думаю, что вам нужно отправить сигнал nohup / reset, kill чтобы он сбрасывал соединение с файлом. Если это так с .bash_history файлом, возможно, я мог бы каким-то образом использовать его, ps чтобы проверить и убедиться в отсутствии подключенных сеансов до запуска сценария фильтрации?
Сортировка истории
Эта команда работает как sort|uniq , но держит линии на месте
В основном, к каждой строке добавляется свой номер. После sort|uniq -ing все строки сортируются в соответствии с их исходным порядком (с использованием поля номера строки), и поле номера строки удаляется из строк.
Это решение имеет недостаток, заключающийся в том, что он не определен, какой представитель класса равных линий сделает его на выходе, и, следовательно, его позиция в конечном выводе не определена. Однако, если будет выбран последний представитель, вы можете sort ввести с помощью второй клавиши:
Управление .bash_history
Для перечитывания и записи истории вы можете использовать history -a и history -w соответственно.
Поэтому я искал точно такую же вещь после раздражения от дубликатов и обнаружил, что если я отредактирую свой
/ .bash_profile (Mac) с помощью:
Он делает именно то, что вы хотели, он сохраняет только самые последние команды. ignoreboth на самом деле так же, как делать, ignorespace:ignoredups и это вместе с erasedups выполнением работы.
По крайней мере, на моем Mac-терминале с Bash эта работа отлично. Нашел это здесь на askubuntu.com .
Нашел это решение в дикой природе и протестировал:
При первом появлении определенного значения строки ($ 0) значение x [$ 0] равно нулю.
Нулевое значение инвертируется ! и становится единым.
Оператор, который оценивает один, вызывает действие по умолчанию, которое является печатью.
Поэтому, когда в первый раз $0 виден конкретный , он печатается.
Каждый раз, когда (повторяется) значение x[$0] isrrented,
его отрицательное значение равно нулю, а оператор, который оценивается как ноль, не печатается.
Чтобы сохранить последнее повторенное значение, измените историю и используйте тот же awk:
Расширяя ответ Клейтона:
tac переверните файл, убедитесь, что вы установили его, moreutils чтобы он был sponge доступен, в противном случае используйте временный файл.
Это сохранит последние дублированные строки:
Это старый пост, но это постоянная проблема для пользователей, которые хотят иметь несколько открытых терминалов и синхронизировать историю между окнами, но не дублировать их.
Мое решение в .bashrc:
- Опция histappend добавляет историю буфера в конец файла истории ($ HISTFILE).
- ignoreboth и erasedups предотвращают сохранение повторяющихся записей в $ HISTFILE
- Команда prompt обновляет кэш истории
- history -n читает все строки из $ HISTFILE, которые могли возникнуть в другом терминале с момента последнего возврата каретки
- history -w записывает обновленный буфер в $ HISTFILE
- history -c стирает буфер, чтобы не возникало дублирования
- history -r перечитывает $ HISTFILE, добавляя пустой буфер
- Скрипт awk хранит первое вхождение каждой встреченной строки. tac переворачивает его, а затем переворачивает обратно, чтобы его можно было сохранить с помощью самых последних команд, еще самых последних в истории
- rm файл / tmp
Каждый раз, когда вы открываете новую оболочку, история стирает все дубликаты, и каждый раз, когда вы Enter нажимаете клавишу в другом окне оболочки / терминала, она обновляет эту историю из файла.
Источник
Команда 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 должна предоставить вам доступ к полному руководству.
Источник