<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://aidalinux.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=Uniq</id>
	<title>Uniq - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://aidalinux.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=Uniq"/>
	<link rel="alternate" type="text/html" href="https://aidalinux.ru/wiki/index.php?title=Uniq&amp;action=history"/>
	<updated>2026-04-20T04:45:45Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://aidalinux.ru/wiki/index.php?title=Uniq&amp;diff=73&amp;oldid=prev</id>
		<title>Langator: Новая страница: «== Описание == uniq — утилита Unix, с помощью которой можно вывести или отфильтровать повторяющ...»</title>
		<link rel="alternate" type="text/html" href="https://aidalinux.ru/wiki/index.php?title=Uniq&amp;diff=73&amp;oldid=prev"/>
		<updated>2011-03-23T15:23:23Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «== Описание == uniq — утилита Unix, с помощью которой можно вывести или отфильтровать повторяющ...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Описание ==&lt;br /&gt;
uniq — утилита Unix, с помощью которой можно вывести или отфильтровать повторяющиеся строки в файле. Если входной файл задан как («-») или не задан вовсе, чтение производится из стандартного ввода. Если выходной файл не задан, запись производится в стандартный вывод. Вторая и последующие копии повторяющихся соседних строк не записываются. Повторяющиеся входные строки не распознаются, если они не следуют строго друг за другом, поэтому может потребоваться предварительная сортировка файлов.&lt;br /&gt;
&lt;br /&gt;
== Использование ==&lt;br /&gt;
&lt;br /&gt;
  uniq [-c | -d | -u] [-i] [-f число_полей] [-s число_символов] [входной_файл [выходной_файл]]&lt;br /&gt;
&lt;br /&gt;
Опции программы имеют следующие значения:&lt;br /&gt;
&lt;br /&gt;
'''''-u''''' Выводить только те строки, которые не повторяются на входе.&lt;br /&gt;
&lt;br /&gt;
'''''-d''''' Выводить только те строки, которые повторяются на входе.&lt;br /&gt;
&lt;br /&gt;
'''''-c''''' Перед каждой строкой выводить число повторений этой строки на входе и один пробел.&lt;br /&gt;
&lt;br /&gt;
'''''-i''''' Сравнивать строки без учёта регистра.&lt;br /&gt;
&lt;br /&gt;
'''''-s''''' число_символов&lt;br /&gt;
&lt;br /&gt;
Игнорировать при сравнении первые число_символов символов каждой строки ввода. Если эта опция указана совместно с -f, то будут игнорироваться первые число_полей полей, а затем ещё число_символов символов. Символы также нумеруются начиная с единицы.&lt;br /&gt;
&lt;br /&gt;
'''''-f''''' число_полей&lt;br /&gt;
&lt;br /&gt;
Игнорировать при сравнении первые число_полей полей каждой строки ввода. Полем является строка непробельных символов, отделённая от соседних полей пробельными символами. Поля нумеруются начиная с единицы.&lt;br /&gt;
&lt;br /&gt;
== Команда uniq без опций ==&lt;br /&gt;
&lt;br /&gt;
Если в тексте следует подряд несколько одинаковых строк, то команда uniq уменьшит их количество до одной.&lt;br /&gt;
&lt;br /&gt;
  echo -e 1234\\n2345\\n3456\\n1111\\n1111\\n1111 | uniq&lt;br /&gt;
  &lt;br /&gt;
  1234&lt;br /&gt;
  2345&lt;br /&gt;
  3456&lt;br /&gt;
  1111&lt;br /&gt;
&lt;br /&gt;
Расшифрую этот пример. Команду echo, при помощи опции -e можно заставить печатать не в строчку, как обычно, а в несколько строк. Для этого нужно в конце каждой будущей строки поставить знак новой строки \n, а чтобы &amp;quot;экранировать&amp;quot; обратный слэш (\), который сам по себе тоже является знаком, нужно этот обратный слэш удвоить: \\, и получится \\n. Например, напечатаем в две строки какой-нибудь стишок, например:&lt;br /&gt;
&lt;br /&gt;
  echo -e Глупый пингвин\\nРобко прячет&lt;br /&gt;
  &lt;br /&gt;
  Глупый пингвин&lt;br /&gt;
  Робко прячет&lt;br /&gt;
&lt;br /&gt;
(Кто не знает, сообщу по секрету, что великий пролетарский писатель Максим Горький в слове пингвин ставил ударение на первом слоге - пИнгвин). Пробел между знаком новой строки и первым словом следующей строки не ставится, иначе получится &amp;quot;лесенка&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
  echo -e Глупый пингвин\\n Робко прячет&lt;br /&gt;
&lt;br /&gt;
  Глупый пингвин&lt;br /&gt;
  Робко прячет&lt;br /&gt;
&lt;br /&gt;
как в стихах другого великого пролетарского поэта Маяковского:&lt;br /&gt;
&lt;br /&gt;
  echo -e Били копыта\\n пели как-будто...&lt;br /&gt;
  &lt;br /&gt;
  Били копыта&lt;br /&gt;
  пели как-будто...&lt;br /&gt;
&lt;br /&gt;
Но довольно поэзии; вернемся к нашему числовому примеру:&lt;br /&gt;
&lt;br /&gt;
  echo -e 1234\\n2345\\n3456\\n1111\\n1111\\n1111 | uniq&lt;br /&gt;
  &lt;br /&gt;
  1234&lt;br /&gt;
  2345&lt;br /&gt;
  3456&lt;br /&gt;
  1111&lt;br /&gt;
&lt;br /&gt;
Итак, в первой части этого программного канала команда echo -e, которая выводит на стандартный вывод столбик чисел. Вывод этот канализируется на ввод команды uniq, которая уменьшает количество одинаковых строк (1111) до одной.&lt;br /&gt;
&lt;br /&gt;
Тут нужно уточнить очень интересную вещь: команда uniq сравнивает только рядом расположенные строчки, и если составить столбик цифр в другом порядке, скажем:&lt;br /&gt;
&lt;br /&gt;
  echo -e 1234\\n1111\\n2345\\n1111\\n3456\\n1111 | uniq&lt;br /&gt;
  &lt;br /&gt;
  1234&lt;br /&gt;
  1111&lt;br /&gt;
  2345&lt;br /&gt;
  1111&lt;br /&gt;
  3456&lt;br /&gt;
  1111&lt;br /&gt;
&lt;br /&gt;
то никакого уменьшения числа повторов не произойдет. Становится понятным, что команда uniq любит уже отсортированные тексты, где все одинаковые строчки собраны вместе. Такой сортировкой славится команда sort, вот и добавим ее в наш программный канал:&lt;br /&gt;
&lt;br /&gt;
  echo -e 1234\\n1111\\n2345\\n1111\\n3456\\n1111 | sort | uniq&lt;br /&gt;
&lt;br /&gt;
  1111&lt;br /&gt;
  1234&lt;br /&gt;
  2345&lt;br /&gt;
  3456&lt;br /&gt;
&lt;br /&gt;
Команда sort сортирует, команда uniq убирает повторы, кажется все прекрасно, если бы не одно &amp;quot;но&amp;quot; - у программы sort есть опция -u, которая справляется с этой задачей не хуже:&lt;br /&gt;
&lt;br /&gt;
  echo -e 1234\\n1111\\n2345\\n1111\\n3456\\n1111 | sort -u&lt;br /&gt;
  &lt;br /&gt;
  1111&lt;br /&gt;
  1234&lt;br /&gt;
  2345&lt;br /&gt;
  3456&lt;br /&gt;
&lt;br /&gt;
Получается, что команда uniq как бы и не нужна...&lt;br /&gt;
&lt;br /&gt;
Не спешите с выводами, у команды uniq есть еще несколько опций, которых нет у команды sort.&lt;br /&gt;
&lt;br /&gt;
== Параметры uniq ==&lt;br /&gt;
&lt;br /&gt;
=== Опция -c ===&lt;br /&gt;
&lt;br /&gt;
--count&lt;br /&gt;
&lt;br /&gt;
Сообщит, сколько было одинаковых строк до их урезания:&lt;br /&gt;
&lt;br /&gt;
  echo -e кот\\nконь\\nсобака\\nкрыса\\nкрыса | uniq -c&lt;br /&gt;
  &lt;br /&gt;
      1 кот&lt;br /&gt;
      1 конь&lt;br /&gt;
      1 собака&lt;br /&gt;
      2 крыса&lt;br /&gt;
&lt;br /&gt;
=== Опция -d ===&lt;br /&gt;
&lt;br /&gt;
--repeated&lt;br /&gt;
&lt;br /&gt;
Эта опция, наоборот, выведет лишь ту строку, которая повторялась в тексте:&lt;br /&gt;
&lt;br /&gt;
  echo -e кот\\nконь\\nсобака\\nкрыса\\nкрыса | uniq -d&lt;br /&gt;
  &lt;br /&gt;
  крыса&lt;br /&gt;
&lt;br /&gt;
Можно узнать и сколько раз эта строка повторялась:&lt;br /&gt;
&lt;br /&gt;
  echo -e кот\\nконь\\nсобака\\nкрыса\\nкрыса | uniq -dc&lt;br /&gt;
     &lt;br /&gt;
       2 крыса&lt;br /&gt;
&lt;br /&gt;
=== Опция -D (расширение GNU) ===&lt;br /&gt;
&lt;br /&gt;
--all-repeated&lt;br /&gt;
&lt;br /&gt;
Выведет все повторяющиеся строки, не уменьшая их числа:&lt;br /&gt;
&lt;br /&gt;
  echo -e кот\\nконь\\nсобака\\nкрыса\\nкрыса | uniq -D&lt;br /&gt;
  &lt;br /&gt;
  крыса&lt;br /&gt;
  крыса&lt;br /&gt;
&lt;br /&gt;
На первый взгляд, это не слишком полезно, но в сочетании с некоторыми другими опциями вполне имеет смысл.&lt;br /&gt;
&lt;br /&gt;
=== Опция -u ===&lt;br /&gt;
&lt;br /&gt;
--unique&lt;br /&gt;
&lt;br /&gt;
Выводит только уникальные строки:&lt;br /&gt;
&lt;br /&gt;
  echo -e кот\\nконь\\nсобака\\nкрыса\\nкрыса | uniq -u&lt;br /&gt;
  &lt;br /&gt;
  кот&lt;br /&gt;
  конь&lt;br /&gt;
  собака&lt;br /&gt;
&lt;br /&gt;
=== Опция -f ===&lt;br /&gt;
&lt;br /&gt;
--skip-fields=ЧИСЛО&lt;br /&gt;
&lt;br /&gt;
-ЧИСЛО&lt;br /&gt;
&lt;br /&gt;
Эта опция пропустит указанное ЧИСЛО &amp;quot;слов&amp;quot;, прежде чем начать искать повторы. Тут следует пояснить, что &amp;quot;словом&amp;quot; команда uniq считает любую непрерывную последовательность символов, отделенную от других символов знаками пробела, либо табуляции (таковых знаков может быть один или больше).&lt;br /&gt;
&lt;br /&gt;
  echo -e Иванов Сергей\\nИванов Михаил\\nИванов Иван\\nИванов Иван\\nИванов Константин | uniq -f 1&lt;br /&gt;
  &lt;br /&gt;
  Иванов Сергей&lt;br /&gt;
  Иванов Михаил&lt;br /&gt;
  Иванов Иван&lt;br /&gt;
  Иванов Константин&lt;br /&gt;
&lt;br /&gt;
В этом примере мы пропустили заведомо одинаковую фамилию, чтобы &amp;quot;отцедить&amp;quot; двойников Иванов. (Правда, безо всяких опций сработало бы не хуже, но в каких-то случаях, скорее всего, эта опция полезна).&lt;br /&gt;
&lt;br /&gt;
Можно скомбинировать эту опцию с другими, слегка изменив синтаксис:&lt;br /&gt;
&lt;br /&gt;
  echo -e Иванов Сергей\\nИванов Михаил\\nИванов Иван\\nИванов Иван\\nИванов Константин | uniq -f1 -c&lt;br /&gt;
  &lt;br /&gt;
      1 Иванов Сергей&lt;br /&gt;
      1 Иванов Михаил&lt;br /&gt;
      2 Иванов Иван&lt;br /&gt;
      1 Иванов Константин&lt;br /&gt;
&lt;br /&gt;
В таком виде она имеет определенный смысл.&lt;br /&gt;
&lt;br /&gt;
Можно было задать эту опцию проще: uniq -1.&lt;br /&gt;
&lt;br /&gt;
=== Опция -s ===&lt;br /&gt;
&lt;br /&gt;
--skip-chars=ЧИСЛО&lt;br /&gt;
&lt;br /&gt;
+ЧИСЛО&lt;br /&gt;
&lt;br /&gt;
Эта опция пропустит необходимое ЧИСЛО символов, прежде начала поиска повторов.&lt;br /&gt;
&lt;br /&gt;
  echo -e пивовар\\nмыловар\\nсыровар | uniq -s 4&lt;br /&gt;
  &lt;br /&gt;
  пивовар&lt;br /&gt;
&lt;br /&gt;
Эту опцию можно комбинировать с другими, если записать без пробела между -s и ЧИСЛОМ:&lt;br /&gt;
&lt;br /&gt;
  echo -e 111222\\n111333\\n111444 | uniq -s3 -c&lt;br /&gt;
    &lt;br /&gt;
      1 111222&lt;br /&gt;
      1 111333&lt;br /&gt;
      1 111444&lt;br /&gt;
&lt;br /&gt;
Можно также ставить просто: uniq +3.&lt;br /&gt;
&lt;br /&gt;
=== Опция -w ===&lt;br /&gt;
&lt;br /&gt;
--check-chars=ЧИСЛО&lt;br /&gt;
&lt;br /&gt;
Позволяет сравнивать на уникальность указанное ЧИСЛО символов в каждой строке:&lt;br /&gt;
&lt;br /&gt;
  echo -e перестройка\\nпеределка\\nперестрелка | uniq -w4&lt;br /&gt;
  перестройка&lt;br /&gt;
&lt;br /&gt;
Работает эта опция и в сочетании с опциями пропуска слов или символов:&lt;br /&gt;
&lt;br /&gt;
  echo -e перестройка\\nпеределка\\nперестрелка | uniq -s2 -w2&lt;br /&gt;
  перестройка&lt;br /&gt;
&lt;br /&gt;
Опции --help и --version общеизвестны, останавливаться на них мы не будем.&lt;br /&gt;
&lt;br /&gt;
Остается добавить, что команда uniq принимает в качестве аргументов не только файлы, которые проверяются на уникальность, но и файлы, куда результат проверки будет записан:&lt;br /&gt;
&lt;br /&gt;
  uniq имя_файла_входящего имя_файла_выходящего&lt;br /&gt;
&lt;br /&gt;
== Команда uniq и символы кириллицы ==&lt;br /&gt;
&lt;br /&gt;
Новые версии программы с русскими буквами работают адекватно (версия 5.97 с некоторыми опциями неадекватно обращалась с кириллицей; версия 6.4 никаких нареканий не вызывает).&lt;br /&gt;
&lt;br /&gt;
== Резюме команды uniq ==&lt;br /&gt;
&lt;br /&gt;
Сырая и не самая необходимая команда (несмотря на маститых авторов: Richard Stallman и David MacKenzie). Следует обновить до новейшей версии, так как в версии 5.97 замечены ошибки. Для отбраковки одинаковых строк советую, вместо команды uniq, применять команду sort -u.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Информация взята с [http://open-club.ru/main/reading/HuMan_uniq open-club.ru]&lt;/div&gt;</summary>
		<author><name>Langator</name></author>
	</entry>
</feed>