связь
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( январь 2013 г. ) |
![]() Пример использования comm команда | |
Оригинальный автор(ы) | Ли Э. МакМахон |
---|---|
Разработчик(и) | AT&T Bell Laboratories , Ричард Столлман , Дэвид Маккензи |
Первоначальный выпуск | ноябрь 1973 года |
Написано в | С |
Операционная система | 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 .
См. также
[ редактировать ]- Сравнение инструментов сравнения файлов
- Список команд Unix
- cmp (Unix) – символьно-ориентированное сравнение файлов.
- Cut (Unix) – разделение файлов, ориентированных на столбцы.
Ссылки
[ редактировать ]- ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
- ^ «Comm(1): Сравнить два отсортированных файла построчно — справочная страница Linux» .
Внешние ссылки
[ редактировать ]
- Единая спецификация UNIX , версия 4 от The Open Group : выбрать или отклонить строки, общие для двух файлов — Справочник по оболочке и утилитам,
- Plan 9 , том 1 Руководство программиста –
- Inferno по общим командам Руководство –