Linux (и его предшественник, Unix) были построены на простом тексте. В результате у него есть все виды полезных инструментов обработки текста, которые вы можете использовать из терминала . Утилита Linux uniq была разработана, чтобы помочь вам сортировать текстовые файлы по уникальным значениям.
Что такое Linux uniq и когда вы его используете?
Команда uniq устанавливается из большинства дистрибутивов Linux из коробки и входит в пакет coreutils. Он используется для идентификации и «свертывания» строк смежного идентичного текста. Давайте немного распакуем это определение.
- Базовая единица для сравнения — строка текста, т.е. весь текст от одной строки возвращается до следующей. Это может включать несколько предложений, если они находятся в одном абзаце.
- По умолчанию uniq сравнивает только соседние строки. Это означает, что если две строки абсолютно одинаковы, но между ними есть разные строки, они будут считаться разными, если вы не примените к команде несколько разных параметров (подробнее об этом позже).
- В этом контексте «сворачивание» означает, что тогда uniq отображает свой вывод, он будет включать только первое вхождение строки.
Команда uniq поможет вам просеять большое количество данных, определить, какие строки совпадают, и удалить их из выходных данных.
Основное использование Linux Uniq Command
На базовом уровне команда Linux uniq выглядит следующим образом:
uniq -o = значение / путь / к / входному файлу
Здесь «o» выше представляет сокращенный флаг для одного из его параметров. Вы также можете ввести это в более длинной форме, например:
uniq --option = значение / путь / к / входному файлу
«Файл ввода» должен быть простым текстовым файлом, содержащим ваши данные. Существует много параметров для команды uniqu в Linux , но может быть неочевидно, как вы можете использовать эти параметры, чтобы предоставить вам полезный вывод. Мы углубимся в некоторые из них в следующих разделах.
Удаление смежных дубликатов с помощью команды uniq
В своей основной форме команда uniq «свернет» соседние дубликаты и отобразит результаты. Например, предположим, что вы начинаете новый блог и у вас есть список людей, которые подписались на ваш электронный бюллетень (newsletter.txt), но еще не стали его участниками.
Jsmith@example.com
Jsmith@example.com
Tmiller@example.com
Mjones@example.com
Mjones@example.com
Так как вы не хотите беспокоить этих людей более одного раза, вы можете дублировать это следующим образом:
$ uniq newsletter.txt
Jsmith@example.com
Tmiller@example.com
Mjones@example.com
По общему признанию, это само по себе не очень интересно. Если в конце файла существует третье вхождение «Jsmith@example.com», оно останется. Поэтому важно изучить некоторые параметры этой команды.
Подсчет количества вхождений с помощью uniq
Предположим, ваш блог взлетел, и люди не только регистрируются, но и подписываются! Для денег! И почему бы и нет? Список получаемых вами платежей начнет расти.
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Питерс Аарон Apeters@example.com $ 10,00
Петерс Аарон Apeters@example.com $ 10,00
Петерс Аарон Apeters@example.com $ 10,00
Миллер Тим Тмиллер@example.com $ 1,00
Миллер Тим Тмиллер @ example.com $ 1,00
Миллер Тим Tmiller@example.com $ 1,00
Миллер Тим Tmiller@example.com $ 1,00
Миллер Тим Tmiller@example.com $ 1,00
Миллер Тим Tmiller@example.com $ 1,00
Джонс Мэри Mjones@example.com $ 5,00
Джонс Мэри Mjones@example.com $ 5,00
Джонс Мэри Mjones@example.com $ 5,00
Джонс Мэри Mjones@example.com $ 5,00
Джонс Фред Fjones@example.com $ 4,00
Джонс Фред Fjones@example.com $ 4,00
Джонс Фред Fjones@example.com $ 4,00
Джонс Фред Fjones@example.com $ 4,00
Джонс Фред Fjones@example.com $ 4,00
В какой-то момент вам захочется подытожить, как долго некоторые из ваших подписчиков были с вами. Учитывая приведенный выше список их платежей на сегодняшний день, вы можете сделать так, чтобы uniq подсчитывал количество вхождений с флагом -c :
$ uniq -c
payment.txt 8 Смит Джон Jsmith@example.com $ 3,00
3 Питерс Аарон Apeters@example.com $ 10,00
6 Миллер Тим Tmiller@example.com $ 1,00
4 Джонс Мэри Мджонс@example.com 5,00 $
5 Джонс Фред Фьонс @ пример. ком $ 4,00
Тем не менее, это опять-таки зависит от соседних строк … если бы были такие, которых не было, в выходных данных программы, которая была бы разработана для дублирования, были бы дубликаты! По этой причине uniq наиболее полезен, когда используется вместе с командой sort .
Отображение уникальных строк с помощью команд sort и uniq
Здесь нам помогает команда сортировки, так как она будет располагать дублированные строки так, чтобы они были смежными, что позволяет uniq отфильтровывать их. Например, представьте, что вышеупомянутый отчет об оплате не был заказан:
Смит Джон Jsmith@example.com $ 3,00
Джонс Фред Fjones@example.com $ 4,00
Миллер Тим Tmiller@example.com $ 1,00
Питерс Аарон Apeters@example.com $ 10,00
Джонс Мэри Мджонс@example.com $ 5,00
Питерс Аарон Апетерс@example.com $ 10,00
Миллер Тим Tmiller@example.com $ 1,00
Джонс Фред Fjones@example.com $ 4,00
Смит Джон Jsmith@example.com $ 3,00
Джонс Фред Fjones@example.com $ 4,00
Питерс Аарон Apeters@example.com $ 10,00
Джонс Фред Fjones@example.com $ 4,00
Джонс Фред Fjones @ example.com $ 4,00
Миллер Тим Tmiller@example.com $ 1,00
Джонс Мэри Mjones@example.com $ 5,00
Смит Джон Jsmith@example.com $ 3,00
Миллер Тим Tmiller@example.com $ 1,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Смит Джон Jsmith@example.com $ 3,00
Джонс Мэри Mjones@example.com $ 5,00
Джонс Мэри Mjones@example.com $ 5,00
Миллер Тим Tmiller@example.com $ 1,00
Миллер Тим Tmiller@example.com $ 1,00
Смит Джон Jsmith@example.com $ 3,00
В этом случае вам нужно сначала запустить этот список с помощью сортировки, чтобы сгруппировать все похожие элементы, а затем запустить uniq . При этом используется оператор канала в командной строке («|»), где результаты команды перед передачей канала передаются непосредственно во вторую команду. Поэтому, когда мы запускаем это на наших смешанных платежах, мы получаем уникальные результаты (с их количеством):
$ sort payment-rand.txt | uniq -c
5 Джонс Фред Fjones@example.com $ 4,00
4 Jones Mary Mjones@example.com $ 5,00
6 Миллер Тим Tmiller@example.com $ 1,00
3 Петерс Аарон Apeters@example.com $ 10,00
8 Смит Джон Jsmith@example.com $ 3,00
Используйте команду uniq для быстрого анализа данных
По мере знакомства с командной строкой Linux вы найдете множество полезных программ, таких как uniq. Конечно, вы могли бы открыть вышеупомянутое в Excel и отсортировать таким образом, но тогда бы вы не начали зарабатывать какие-либо технические кредиты, не так ли?