Найти в Дзене

Linux — удалить дубликаты строк в файле

Оглавление

Напоминалка. Если нам нужно удалить из файла дубликаты строк, то нельзя использовать операторы перенаправления ">" или ">>". Такие операторы имеют более высокий приоритет и начинают писать в файл ещё до того, как полностью считали из него же все строки.

Ну, как нельзя, можно, если использовать промежуточный файл, но это некрасиво.

На помощь приходят инструменты: tee, sponge (из пакета moreutils), sed -i, awk и другие инструменты записи в файл.

Сортировка и поиск дубликатов

Давайте сначала разберём пару способов поиска дубликатов строк.

Если у нас строки в файле уже отсортированы, то вычистить дубликаты можно командой uniq. Имеем файл test.txt:

Ася
Боря
Коля
Коля
Олег

Выполняем:

cat test.txt | uniq

или

uniq test.txt

Результат:

Ася
Боря
Коля
Олег

Если у нас строки в файле не отсортированы, то нужно сортировать, например с sort. Имеем файл test.txt:

Ася
Коля
Боря
Олег
Коля

Выполняем:

cat test.txt | sort | uniq

или

sort test.txt | uniq

или

sort -u test.txt

Результат:

Ася
Боря
Коля
Олег

С сортировкой и вычищением дубликатов разобрались.

Запись результата в тот же файл

А теперь самое интересное. Нам нужно сохранить результат в тот же самый файл. Операторы перенаправления можно использовать в данном случае только с промежуточным файлом, например:

sort -u test.txt > test.tmp
mv -f test.tmp test.txt

или одной строкой

sort -u test.txt > test.tmp; mv -f test.tmp test.txt

Можно использовать губку sponge, которая накапливает весь вывод перед вводом:

apt-get install moreutils
sort -u test.txt | sponge test.txt

Можно использовать тройник tee:

sort -u test.txt | tee test.txt

или без вывода на экран

sort -u test.txt | tee test.txt >/dev/null

И самый, на мой взгляд, оптимальный метод вывода в файл без перенаправления:

sort -u test.txt -o test.txt

Источник:
https://internet-lab.ru/linux_uniq_sort

💰 Поддержать проект

Если вам понравилась статья, то ставьте 👍🏻 каналу.
Пишите комментарии, задавайте вопросы, подписывайтесь.

Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
5 Дистрибутивов Linux для Творческой Работы
Для неподготовленных пользователей Linux может показаться чем-то загадочным, но на самом деле это отличный рабочий стол с множеством мощных мультимедийных приложений. Дистрибутивы, которые мы рассмотрим, помогут вам сосредоточиться на творческой работе. Если вы не знаете, с какого дистрибутива начать, ориентированного на творчество, Ubuntu Studio будет отличным вариантом. Этот дистрибутив построен на широко поддерживаемой операционной системе и включает обширную коллекцию креативных программ в стандартной установке...
Почему Linux никому не нужен - объясняю простым языком
На рынке операционных систем для компьютеров, традиционно только два игрока - Windows и MacOS. Есть еще Linux, но о нем, в приличном обществе, лучше не вспоминать. Но если вдруг, вас посетила "светлая" идея поставить к себе на компьютер Linux в качестве основной системы - лучше бы передумать, и вот почему. Я не помню, когда в последний раз открывал командную строку на Windows. Может, это было год назад? В любом случае, ее открытие - не рядовое событие на нормальной системе (MacOS в список "нормальных" не входит)...
Возможно, самый известный баг ОС на базе Linux
Бывалые линуксоиды знают, что менять язык в установщике Linux нельзя, иначе при создании профиля вы рискуете словить весьма неприятный баг. Но, похоже, что именно случится с системой, понимают далеко не все. Я вот был уверен, что проблема заключается именно в раскладке, но, как оказалось, симптомы могут быть максимально разными. А раз так, у меня теперь снова есть повод пересмотреть своё отношение к некоторым дистрибутивам. Самый известный, но в тоже время самый непонятный баг ОС на базе Linux Можете...
Документы, вакансии и контакты