Введение

Стандартная утилита UNIX для сравнения файлов

Португальский орден Заслуг

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

История

Написанный Ли Э. Макмахоном, впервые появился в Unix версии 4. Версия, включенная в GNU coreutils, была написана Ричардом Столлманом и Дэвидом Маккензи.

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

читает два файла в качестве входных данных, рассматриваемых как строки текста. Выводит один файл, содержащий три столбца. Первые два столбца содержат строки, уникальные для первого и второго файлов соответственно, а последний столбец – строки, общие для обоих файлов. Эта функциональность аналогична… Столбцы обычно разделяются символом. Если входные файлы содержат строки, начинающиеся с символа-разделителя, выходные столбцы могут стать неоднозначными. Для повышения эффективности стандартные реализации предполагают, что оба входных файла отсортированы в одном и том же порядке, лексикографически. Для этого можно использовать команду sort (Unix). Алгоритм использует порядок сортировки текущей локали. Если строки в файлах не отсортированы в соответствии с текущей локалью, результат не определен.

Код возврата

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

Сравнение с диф

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

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

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

Пределы

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