Uniq linux не работает

Обновлено: 06.07.2024

Оригинал: Linux Uniq Command Tutorial for Beginners (10 examples)
Автор: Himanshu Arora
Дата публикации: 23 мая 2017 г.
Перевод: А.Панин
Дата перевода: 24 мая 2017 г.

Если вы являетесь пользователем интерфейса командной строки Linux и ваша работа связана с редактированием текстовых файлов, вы должны знать (если уже не знаете) о существовании огромного количества утилит с интерфейсом командной строки, которые могут помочь вам в различных ситуациях. Например, одной из таких утилит является утилита uniq , выводящая или удаляющая из вывода повторяющиеся строки, находящиеся в текстовом файле.

В данной статье мы будем обсуждать методику использования утилиты uniq на основе простых для понимания примеров. Но перед тем, как приступить к рассмотрению примеров стоит упомянуть о том, что все примеры и инструкции из данной статьи были протестированы в системе Ubuntu 16.04 LTS.

Утилита uniq в Linux

Как уже говорилось ранее, утилита uniq осуществляет вывод или удаление из вывода повторяющихся строк. А это синтаксис соответствующей команды:

А это описание функций утилиты с ее страницы руководства: "Утилита осуществляет фильтрацию идентичных строк из ВХОДНОГО ФАЙЛА (или из стандартного потока ввода) и выводит информацию в ВЫХОДНОЙ ФАЙЛ (или стандартный поток вывода). При вызове без параметров идентичные строки объединяются в рамках первых найденных экземпляров строк."

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

1. Удаление повторяющихся строк из вывода

Предположим, что в нашем распоряжении имеется файл со следующими строками:


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


2. Вывод информации о количестве дубликатов каждой из строк

Если вам нужно, вы можете использовать утилиту uniq для вывода информации о количестве повторений каждой из строк файла. Это может быть сделано с помощью параметра командной строки -c . Например, команда

будет генерировать следующий вывод:


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

3. Вывод лишь повторяющихся строк

Для того, чтобы утилита uniq выводила лишь повторяющиеся строки, следует использовать параметр -D командной строки. Например, предположим, что файл с именем файл file1 теперь содержит дополнительную строку в конце (обратите внимание на то, что эта строка не повторяется).


Теперь при исполнении команды

будет генерироваться следующий вывод:


Как вы видите, параметр -D сообщает утилите uniq о необходимости вывода всех повторяющихся строк, включая их повторы. Для лучшей читаемости вы можете активировать режим вывода пустой строки после каждой из групп повторяющихся строк с помощью параметра --all-repeated .

Данный параметр требует от пользователя обязательного указания метода добавления разделителя. Строки могут добавляться к разделителю (то есть, пустой строке) с помощью метода prepend или разделяться с помощью него с помощью метода append . Например, в данном случае используется метод prepend .


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


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

4. Пропуск начальных фрагментов строк

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


Теперь предположим, что строки должны считаться совпадающими или не совпадающими на основании совпадения или несовпадения их вторых полей (то есть HTF или FF) и вам нужно сделать так, чтобы утилита uniq использовала такой же критерий сравнения, чего несложно добиться с помощью параметра командной строки -f .

Параметр -f требует от вас обязательной передачи числа, которое соответствует количеству полей, которые нужно пропустить. Например, в нашем случае мы передаем в качестве значения параметр -f значение 1, так как мы хотим, чтобы утилита uniq пропустила лишь первое поле:


Из вывода очевидно, что утилита uniq посчитала первую и третью строку повторяющимися исключительно на основе их вторых полей.

5. Вывод всех строк с разделением групп повторяющихся строк

При необходимости вывода всех строк с разделением групп повторяющихся строк с помощью пустой строки вы можете использовать параметр --group . Как и в случае описанного выше параметра --all-repeated , параметр --groups требует от пользователя обязательного указания позиции пустой строки ( prepend , append или both ).

Это пример использования рассматриваемого параметра:


Обратите внимание на параметр -f , который обсуждался в предыдущем разделе.

6. Вывод лишь не повторяющихся строк

Вы уже наверняка поняли, что утилита uniq по умолчанию выводит лишь повторяющиеся строки. Но если вам нужно, вы можете сообщить ей о необходимости вывода лишь не повторяющихся или уникальных строк. Это делается с помощью параметра командной строки -u .

В нашем случае команда будет выглядеть следующим образом:

Это пример ее использования:


Обратите внимание на параметр -f , который обсуждался в разделе 4.

7. Пропуск заданного количества символов в начале строк

В одном из предыдущих разделов мы обсуждали методику пропуска полей строк при использовании утилиты uniq. Однако, при необходимости вы можете сообщить утилите о необходимости пропуска не начальных полей, а начальных символов строк. Для доступа к соответствующей функции может использоваться параметр командной строки -s .

Например, предположим, что наш файл содержит следующие строки:


Теперь, если вы захотите, чтобы uniq пропустила первые 4 символа каждой строки перед их сравнением, вы сможете воспользоваться следующей командой:

А это приведенная выше команда в действии:


Несложно заметить, что четвертая строка (faq_forge) из оригинального файла была пропущена. Это объясняется тем, что после пропуска первых четырех символов третья и четвертая строки становятся идентичными для утилиты uniq и она выводит лишь первую из них.

8. Указание количества символов для сравнения

По аналогии с пропуском символов, вы можете сообщить утилите uniq о необходимости сравнения лишь заданного количества символов строк. Для этой цели вам придется использовать параметр командной строки -w .

Например, предположим, что файл содержит следующие строки:


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

Это приведенная выше команда в действии:


Так как первые три символа третьей и четвертой строк совпадают, эти строки считаются утилитой идентичными. По этой причине в выводе находится лишь третья строка.

9. Сравнение строк без учета регистра

По умолчанию утилита uniq осуществляет сравнение строк с учетом регистра символов. Однако, вы можете активировать режим сравнения строк без учета регистра символов с помощью параметра командной строки -i .

Например, предположим, что мы будем использовать файл с содержимым, аналогичным рассмотренному в предыдущем разделе, но теперь четвертая строка будет начинаться с символов H, O и W в верхнем регистре.


Теперь, если вы попытаетесь выполнить рассмотренную в предыдущем разделе команду, вы получите отличный вывод:


Это объясняется тем, что первые три символа третьей и четвертой строк отличны для утилиты uniq ввиду их регистра. В подобных ситуациях вы можете активировать режим сравнения строк без учета регистра с помощью параметра командной строки -i .


10. Использование завершающего нулевого символа вместо символа перехода на новую строку

По умолчанию утилита uniq генерирует вывод с завершающим символом перехода на новую строку. Однако, при необходимости вы можете активировать режим использования завершающего нулевого символа (полезный при вызове uniq из сценариев). Для этого следует использовать параметр командной строки -z :

Заключение

Мы рассмотрели практически все поддерживаемые утилитой uniq параметры командной строки, поэтому вам остается лишь самостоятельно испытать их в работе для того, чтобы лучше понять их принцип работы и функции. И как обычно, в случае каких-либо сомнений и вопросов следует обращаться к странице руководства утилиты .

Favorite

Добавить в избранное

Команда Uniq в Linux с примерами

Н аучитесь использовать команду uniq в Unix и Linux с этими практическими примерами.

Команда uniq в Unix и Linux используется для фильтрации дублированного текста. Она может использоваться сама по себе, но обычно используется вместе с другими командами, такими как определение избыточной информации в файле.

Вот синтаксис команды uniq:

Когда вы запускаете uniq без параметров, она будет использоваться с stdin и stdout для ввода и вывода.

Хотя использование stdin возможно при использовании буфера обмена (копирование/вставка), но это не самое практичное использование.

Вместо этого вы, вероятно, захотите использовать эту команду для файла, который, как вы подозреваете, содержит дублирующую информацию.

Одним из ограничений команды uniq является то, что она будет идентифицировать только дубликаты, которые находятся рядом друг с другом в файле. Это довольно просто, но позвольте нам показать вам пример, чтобы вы могли увидеть его в действии.

Таким образом, вы сразу знаете, что не можете доверять программе, чтобы идентифицировать каждый дубликат самостоятельно. Есть несколько способов обойти это, и обычно это происходит с помощью команды sort .

7 примеров команды uniq в Linux

Мы использовали настоящий системный журнал, но редактировали его для демонстрационных целей. Большая часть файла уже отсортирована в соседнем порядке, но мы оставили пару строк «не на своем месте», чтобы показать функциональность команды uniq.

Пример 1. Использование команды uniq по умолчанию

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

Читать 9 простых способов эффективного использования команды Less в Linux

Пример 2: Вывести отфильтрованные результаты в файл назначения

Вот содержимое выходного файла:

Этот вариант довольно понятен. Программа добавит счет в начало каждой строки.

Как видите, отображаются только строки, которые дублируются по всему файлу, если вы используете опцию -d команды uniq.

Здесь вы получите обратный вывод предыдущей команды. Ни одна из этих команд не повторяется в файле.

Это действительно два примера, но функции практически идентичны. Мы объясняем, как они работают, а затем предоставляем некоторую ясность в различиях между ними двумя.

Каждый из них использует следующий синтаксис

Если вы хотите использовать команду uniq во втором столбце, вам придется пропустить первое поле следующим образом:

Как вы можете видеть, для одной и той же строки требуются «red fish» и «green fish», поскольку первое поле (с цветами) было проигнорировано. Если вы используете здесь опцию count, она покажет количество найденных уникальных строк:

Зачем вам это нужно? Мы дадим вам практический сценарий. Многие файлы журналов имеют временную метку в начале строк. Если вы хотите найти в таком файле только уникальные строки, вы можете пропустить первое поле с отметкой времени с параметром -f.

Точно так же вы можете пропустить определенное количество символов.

Если вы использовали файл журнала для предыдущих примеров, это нормально. Мы хотели сделать текст сравнения немного проще, чтобы избежать путаницы. Если нет, давайте вернемся назад и посмотрим, что произойдет, если вы используете только первые символы для поиска дубликатов.

Все строки, начинающиеся с «/usr», теперь обозначаются как «одинаковые» с точки зрения программы.

Это может оказаться полезным, если вы ищете конкретное событие журнала.

Бонус: избегайте неполных совпадений, используя «sort» и «uniq» одновременно.

Вы можете запускать эти команды отдельно для достижения того же эффекта, но если вы никогда не использовали конвейер (символ |) в Linux, это отличный способ узнать о них.

Вы можете использовать каналы для комбинирования различных команд, чтобы сэкономить нам нажатия клавиш и улучшить наш рабочий процесс. Команды будут выполняться в порядке их ввода.

Это пример ввода, который мы собираемся использовать:

Теперь давайте отсортируем входной файл и затем используем команду uniq. Команда sort переупорядочивает текст так, что все элементы сначала располагаются в соседнем порядке. Затем, когда команда uniq запущена, она находит только 3 уникальные строки в файле.

Каналы позволяют нам запускать несколько команд одновременно, но важно учитывать их порядок.

Обратите внимание, что содержимое файла остается неизменным так же, как и при отдельном запуске команд. Соединение двух команд вместе также сохраняет результаты в «памяти» системы. Если вы запускаете их отдельно, вы не сможете получить эти результаты, пока не создадите новый файл и не используете его для перезаписи содержимого оригинала перед выполнением второй команды.

Вывод

Как вы можете себе представить, это делает это важной концепцией в обучении bash. Эти конкретные команды (sort и uniq) часто используются вместе для быстрой фильтрации информации из больших файлов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Я пробовал что-то с sort | uniq но это не работает.

  • -u уникальный
  • -t, так запятая является разделителем
  • -k1,1 для ключевого поля 1
  • -F задает разделитель полей.
  • это первое поле.
  • _[val] ищет val в хэш - _ (регулярная переменная).
  • ++ increment и возвращает старое значение.
  • ! возвращает логическое не.
  • в конце есть неявная печать.

рассмотреть несколько столбцов.

сортировать и давать уникальный список на основе столбца 1 и столбца 3:

  • -t : двоеточие-это разделитель
  • -k 1,1 -k 3,3 на основе столбца 1 и столбца 3

или если вы хотите использовать uniq:

<mycvs.cvs tr -s ',' ' ' | awk '' | uniq -c -f2

Если вы хотите сохранить последний из дубликатов, которые вы можете использовать

что было моим требованием

tac перевернет файл строка за строкой

вот очень интересный способ.

сначала отформатируйте содержимое так, чтобы столбец для сравнения уникальности был фиксированной шириной. Один из способов сделать это-использовать awk printf с описателем ширины поля/столбца ("%15s").

Теперь опции-f и-w uniq можно использовать для пропуска предыдущих полей / столбцов и указания ширины сравнения (ширина столбцов).

вот три примера.

В первом примере.

1) Временно сделайте интересующий столбец фиксированной шириной, большей или равной максимальной ширине поля.

2) используйте опцию-F uniq, чтобы пропустить предыдущие столбцы, и используйте опцию-w uniq, чтобы ограничить ширину tmp_fixed_width.

3) Удалите конечные пробелы из столбца, чтобы" восстановить " его ширину (при условии, что раньше не было конечных пробелов).

во втором примере.

создайте новый столбец uniq 1. Затем удалите его после применен фильтр uniq.

третий пример такой же, как и второй, но для нескольких столбцов.

ну, проще, чем изолировать столбец с помощью awk, если вам нужно удалить все с определенным значением для данного файла, почему бы просто не сделать grep-v:

например, удалить все со значением "col2" во-вторых строка: столбец col1,и col2,с col3,col4

если этого недостаточно, потому что некоторые строки могут быть неправильно удалены, возможно, соответствующее значение отображается в другом столбце, вы можете сделать что-то вроде этого:

awk, чтобы выделить столбец обидеть : например,

- F задает поле с разделителями",", $2 означает столбец 2, за которым следует некоторый пользовательский разделитель, а затем вся строка. Затем вы можете фильтровать, удаляя строки, которые начать С оскорбительным значением:

а затем удалите материал перед разделителем:

(Примечание-команда sed небрежна, потому что она не включает экранирование значений. Также шаблон sed действительно должен быть что-то вроде "[^|]+" (т. е. ничего не разделитель). Но, надеюсь, это достаточно ясно.

Оригинал: Linux Uniq Command Tutorial for Beginners (10 examples)
Автор: Himanshu Arora
Дата публикации: 23 мая 2017 г.
Перевод: А.Панин
Дата перевода: 24 мая 2017 г.

Если вы являетесь пользователем интерфейса командной строки Linux и ваша работа связана с редактированием текстовых файлов, вы должны знать (если уже не знаете) о существовании огромного количества утилит с интерфейсом командной строки, которые могут помочь вам в различных ситуациях. Например, одной из таких утилит является утилита uniq , выводящая или удаляющая из вывода повторяющиеся строки, находящиеся в текстовом файле.

В данной статье мы будем обсуждать методику использования утилиты uniq на основе простых для понимания примеров. Но перед тем, как приступить к рассмотрению примеров стоит упомянуть о том, что все примеры и инструкции из данной статьи были протестированы в системе Ubuntu 16.04 LTS.

Утилита uniq в Linux

Как уже говорилось ранее, утилита uniq осуществляет вывод или удаление из вывода повторяющихся строк. А это синтаксис соответствующей команды:

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

1. Удаление повторяющихся строк из вывода

Предположим, что в нашем распоряжении имеется файл со следующими строками:


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


2. Вывод информации о количестве дубликатов каждой из строк

Если вам нужно, вы можете использовать утилиту uniq для вывода информации о количестве повторений каждой из строк файла. Это может быть сделано с помощью параметра командной строки -c . Например, команда

будет генерировать следующий вывод:


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

3. Вывод лишь повторяющихся строк

Для того, чтобы утилита uniq выводила лишь повторяющиеся строки, следует использовать параметр -D командной строки. Например, предположим, что файл с именем файл file1 теперь содержит дополнительную строку в конце (обратите внимание на то, что эта строка не повторяется).


Теперь при исполнении команды

будет генерироваться следующий вывод:


Данный параметр требует от пользователя обязательного указания метода добавления разделителя. Строки могут добавляться к разделителю (то есть, пустой строке) с помощью метода prepend или разделяться с помощью него с помощью метода append . Например, в данном случае используется метод prepend .


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


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

4. Пропуск начальных фрагментов строк

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


Теперь предположим, что строки должны считаться совпадающими или не совпадающими на основании совпадения или несовпадения их вторых полей (то есть HTF или FF) и вам нужно сделать так, чтобы утилита uniq использовала такой же критерий сравнения, чего несложно добиться с помощью параметра командной строки -f .

Параметр -f требует от вас обязательной передачи числа, которое соответствует количеству полей, которые нужно пропустить. Например, в нашем случае мы передаем в качестве значения параметр -f значение 1, так как мы хотим, чтобы утилита uniq пропустила лишь первое поле:


Из вывода очевидно, что утилита uniq посчитала первую и третью строку повторяющимися исключительно на основе их вторых полей.

5. Вывод всех строк с разделением групп повторяющихся строк

Это пример использования рассматриваемого параметра:


Обратите внимание на параметр -f , который обсуждался в предыдущем разделе.

6. Вывод лишь не повторяющихся строк

Вы уже наверняка поняли, что утилита uniq по умолчанию выводит лишь повторяющиеся строки. Но если вам нужно, вы можете сообщить ей о необходимости вывода лишь не повторяющихся или уникальных строк. Это делается с помощью параметра командной строки -u .

В нашем случае команда будет выглядеть следующим образом:

Это пример ее использования:


Обратите внимание на параметр -f , который обсуждался в разделе 4.

7. Пропуск заданного количества символов в начале строк

В одном из предыдущих разделов мы обсуждали методику пропуска полей строк при использовании утилиты uniq. Однако, при необходимости вы можете сообщить утилите о необходимости пропуска не начальных полей, а начальных символов строк. Для доступа к соответствующей функции может использоваться параметр командной строки -s .

Например, предположим, что наш файл содержит следующие строки:


Теперь, если вы захотите, чтобы uniq пропустила первые 4 символа каждой строки перед их сравнением, вы сможете воспользоваться следующей командой:

А это приведенная выше команда в действии:


Несложно заметить, что четвертая строка (faq_forge) из оригинального файла была пропущена. Это объясняется тем, что после пропуска первых четырех символов третья и четвертая строки становятся идентичными для утилиты uniq и она выводит лишь первую из них.

8. Указание количества символов для сравнения

По аналогии с пропуском символов, вы можете сообщить утилите uniq о необходимости сравнения лишь заданного количества символов строк. Для этой цели вам придется использовать параметр командной строки -w .

Например, предположим, что файл содержит следующие строки:


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

Это приведенная выше команда в действии:


Так как первые три символа третьей и четвертой строк совпадают, эти строки считаются утилитой идентичными. По этой причине в выводе находится лишь третья строка.

9. Сравнение строк без учета регистра

По умолчанию утилита uniq осуществляет сравнение строк с учетом регистра символов. Однако, вы можете активировать режим сравнения строк без учета регистра символов с помощью параметра командной строки -i .

Например, предположим, что мы будем использовать файл с содержимым, аналогичным рассмотренному в предыдущем разделе, но теперь четвертая строка будет начинаться с символов H, O и W в верхнем регистре.


Теперь, если вы попытаетесь выполнить рассмотренную в предыдущем разделе команду, вы получите отличный вывод:


Это объясняется тем, что первые три символа третьей и четвертой строк отличны для утилиты uniq ввиду их регистра. В подобных ситуациях вы можете активировать режим сравнения строк без учета регистра с помощью параметра командной строки -i .


10. Использование завершающего нулевого символа вместо символа перехода на новую строку

По умолчанию утилита uniq генерирует вывод с завершающим символом перехода на новую строку. Однако, при необходимости вы можете активировать режим использования завершающего нулевого символа (полезный при вызове uniq из сценариев). Для этого следует использовать параметр командной строки -z :

Заключение

Мы рассмотрели практически все поддерживаемые утилитой uniq параметры командной строки, поэтому вам остается лишь самостоятельно испытать их в работе для того, чтобы лучше понять их принцип работы и функции. И как обычно, в случае каких-либо сомнений и вопросов следует обращаться к странице руководства утилиты .

Команда терминала uniq не работает?

Я пытаюсь научиться использовать команду терминала uniq , Я использую Mac, Bash Shell (Unix).

после некоторого поиска в Google я обнаружил, что должен написать LC_ALL=C перед uniq:

Но когда я набираю это, я получаю этот вывод:

Это не правильный вывод. Я не знаю, что я делаю неправильно, я не могу найти ответ и в Google.

Есть ли кто-нибудь там, кто знает, что я делаю не так?

это результат od -c terminal.txt :

и это результат file terminal.txt :

а также cat terminal.txt :

1 ответ

Ваш файл закодирован в UTF-16, который uniq не может обработать.

Чтобы преобразовать файл в UTF-8, который он может сделать, выполните следующие действия:

Команда uniq должна затем работать с вашим вновь созданным файлом.

Чтобы решить эту проблему в будущем, вам следует разобраться в настройках вашего редактора и изменить их так, чтобы ваши файлы сохранялись как UTF-8 вместо UTF-16.

Возможно, вы также захотите ознакомиться с простыми редакторами, которые вы можете запустить из командной строки, такими как vi/vim, emacs или nano, хотя вначале к этим редакторам нужно привыкнуть. Эти редакторы обычно создают простые текстовые файлы, которые не будут иметь проблем, вызванных редактором, который вы использовали для создания вашего файла.

команда uniq не работает должным образом?

Итак, я проверяю md5 хэш моих файлов с этим как мой вывод:

Насколько я понимаю, только один из них derpina.txt или derp.txt должен отображаться, поскольку их хэши одинаковы. Я что-то пропустил? Может кто-нибудь просветить меня, почему это выводит, как это?

Вы должны использовать sort перед uniq :

uniq удаляет только повторяющиеся строки Он не переупорядочивает строки в поисках повторов. sort делает эту часть.

Это задокументировано в man uniq :

У команды sort есть опция для уникальных строк вывода, а строки уникальны относительно ключей, используемых для сортировки. Это означает, что мы можем использовать мощный синтаксис ключа, sort чтобы определить, в какой части строки должны быть уникальными.

дает точно такой же результат, но sort часть более гибкая для других целей.

Команда uniq Linux

Команда uniq предназначена для поиска одинаковых строк в массивах текста. При этом с найденными совпадениями пользователь может совершать множество действий — например, удалять их из вывода либо наоборот, выводить только их.

Работа команды осуществляется как с текстовыми файлами (в том числе, записями скриптов), так и с текстом, напечатанным в командной строке терминала.

Синтаксис uniq

Запись команды осуществляется следующим образом:

$ uniq опции файл_источник файл_для_записи

echo -e [текст, слова в котором разделены управляющей последовательностью\\n] | uniq

Эта управляющая последовательность нужна, чтобы указать утилите, что каждое слово выводится в новой строке. Если указано только название файла источника, результат выполнения команды появится прямо в окне терминала. А при наличии выходного файла текст будет напечатан в теле документа.

Опции uniq

У команды uniq есть такие основные опции:

Вместе с основными опциями могут применяться дополнительные. Они нужны для более тонких настроек работы команды:

Примеры использования uniq

Прежде всего следует отметить главную особенность команды uniq — она сравнивает только строки, которые находятся рядом. То есть, если две строки, состоящие из одинакового набора символов, идут подряд, то они будут обнаружены, а если между ними расположена строка с отличающимся набором символов — то не будут поэтому перед сравнением желательно отсортировать строки с помощью sort. Без задействования файлов uniq работает так:

echo -e небо\\nоблака\\nоблака\\nоблака\\nсолнце\\nзвезды | uniq


После команды uniq можно использовать её опции. Вот пример вывода, где не просто удалены повторы, но и указано количество одинаковых строк:

echo -e небо\\nоблака\\nоблака\\nоблака\\nсолнце\\nзвезды | uniq -c


Теперь применим команду к тексту, который находится в файле.


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


Причина этого — незаметный глазу символ пробела, который стоит в конце одной из строк первой группы. Нужно быть предельно внимательным при использовании uniq, чтобы получить качественный результат.

echo -e небо исполосовано молниями\\nоблака на небе\\nоблака разогнал ветер\\nоблака закрыли солнце\\nсолнце светит ярко\\nзвезды кажутся огромными | uniq -w5


Как видно на скриншоте, повторяющиеся строки, которые начинались словом «облака», были удалены. Осталась только первая из них. Вывод только уникальных строк с использованием опции -u выглядит так:

echo -e небо\\nоблака\\nоблака\\nоблака\\nсолнце\\nзвезды | uniq -u



Тогда как append не добавило пустую строку перед текстом:


Выводы

Команда uniq linux пригодится тем, кто часто и много работает с массивами текста, не имея возможности вычитывать их самостоятельно. Следует заметить, что не все версии uniq работают исправно, поэтому иногда результат выдачи может отличаться от ожидаемого.

Свои вопросы относительно использования команды, а также замечания и пожелания оставляйте в комментариях.

Читайте также: