Jump to content

связь

связь
Оригинальный автор(ы) Ли Э. МакМахон
Разработчик(и) AT&T Bell Laboratories , Ричард Столлман , Дэвид Маккензи
Первоначальный выпуск ноябрь 1973 года ; 50 лет назад ( 1973-11 )
Написано в С
Операционная система Unix , Unix-подобные , Plan 9 , Inferno
Платформа Кросс-платформенный
Тип Команда
Лицензия основные утилиты : GPLv3+
План 9: МОЯ лицензия

The Команда comm в Unix семействе компьютерных операционных систем — это утилита, которая используется для сравнения двух файлов на наличие общих и отдельных строк. com указан в стандарте POSIX . Он был широко доступен в Unix-подобных операционных системах с середины до конца 1980-х годов.

Автор Ли Э. МакМэхон comm впервые появился в версии 4 Unix . [1]

Версия comm, входящий в состав GNU coreutils, был написан Ричардом Столлманом и Дэвидом Маккензи. [2]

Использование

[ редактировать ]

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

Столбцы обычно выделяются значком <табуляция> символ. Если входные файлы содержат строки, начинающиеся с символа-разделителя, выходные столбцы могут стать неоднозначными.

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

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

Код возврата

[ редактировать ]

В отличие от diff , код возврата из comm не имеет логического значения относительно связи двух файлов. Код возврата 0 указывает на успех, код возврата >0 указывает на ошибку, возникшую во время обработки.

$ cat foo
apple
banana
eggplant
$ cat bar
apple
banana
banana
zucchini
$ comm foo bar
                  apple
                  banana
          banana
eggplant
          zucchini

Это показывает, что в обоих файлах есть один банан, но только в bar есть второй банан.

Более подробно, выходной файл имеет следующий вид. Обратите внимание, что столбец интерпретируется по количеству первых символов табуляции. \t представляет символ табуляции, а \n представляет собой новую строку ( Escape-символ#Программирование и форматы данных ).

0 1 2 3 4 5 6 7 8 9
0 \ т \ т а п п л и \п
1 \ т \ т б а н а н а \п
2 \ т б а н а н а \п
3 и г г п л а н т \п
4 \ т С в с с час я н я \п

Сравнение с разницей

[ редактировать ]

В общих чертах, diff — более мощная утилита, чем комм . Чем проще com лучше всего подходит для использования в сценариях.

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

Небольшая разница между связь и разница в том, что comm не будет пытаться указать, что между двумя файлами «изменилась» строка; строки отображаются либо в столбцах «из файла № 1», «из файла № 2» или «в обоих». Это может быть полезно, если вы хотите, чтобы две строки считались разными, даже если они имеют лишь незначительные различия.

Другие варианты

[ редактировать ]

comm имеет параметры командной строки для подавления любого из трех столбцов. Это полезно для сценариев.

Также есть возможность прочитать один файл (но не оба) со стандартного ввода.

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

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

Другие реализации читают строки с помощью функции fgets () . Эта функция требует фиксированного буфера. В этих реализациях размер буфера часто определяется в соответствии с POSIX . макросом LINE_MAX .

См. также

[ редактировать ]
  1. ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  2. ^ «Comm(1): Сравнить два отсортированных файла построчно — справочная страница Linux» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a5a5ca1a3bdd3c25ee34bbb49071f846__1703620380
URL1:https://arc.ask3.ru/arc/aa/a5/46/a5a5ca1a3bdd3c25ee34bbb49071f846.html
Заголовок, (Title) документа по адресу, URL1:
comm - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)