Программирование в стандарте POSIX


Простейшие средства обработки текстовых файлов - часть 11


cmp [-l | -s] файл1 файл2

По умолчанию cmp выдает на стандартный вывод номера байта и строки, где встретилось первое отличие. Опция -l предписывает выдавать все отличия в виде номеров и содержимого (восьмеричного) байт. По опции -s отличия не выдаются, возвращается лишь соответствующий код завершения (0 - файлы совпадают, 1 - файлы различаются, больше единицы - зафиксирована ошибка).

Если в продолжение примера с утилитой diff сравнить две версии файла version.h посредством cmp (см. пример 6.20), результат будет выглядеть так, как показано в пример 6.21.

cmp -l binutils-2_14/bfd/version.h\ binutils-2_14-branch/bfd/version.h

Листинг 6.20. Пример использования служебной программы cmp.

30 60 61 31 66 60 32 61 60 33 62 67

Листинг 6.21. Возможный результат работы служебной программы cmp.

Еще одно средство выявления различий (и, кроме того, совпадений) текстовых файлов - служебная программа comm:

comm [-123] файл1 файл2

Она читает файл1 и файл2 (их содержимое должно быть отсортировано в лексикографическом порядке) и выводит результаты в три столбца:

  1. строки, входящие только в файл1;
  2. строки, входящие только в файл2;
  3. строки, входящие в оба файла.

Опции -1, -2 или -3 подавляют вывод соответствующих столбцов. Так, comm -12 выводит строки, общие для обоих файлов, comm -23 - имеющиеся только в файле1, comm -123 не выводит ничего.

В стандарте POSIX-2001 приведен следующий пример использования служебной программы comm. Пусть файл xcu содержит отсортированный список утилит, вошедших в данный стандарт, файл xpg3 - аналогичный список для спецификации X/Open Portability Guide, Issue 3, а файл svid89 представляет собой отсортированный список утилит из System V Interface Definition Third Edition. Тогда конвейер, показанный в пример 6.22, выдаст список служебных программ, фигурирующих в спецификациях XPG3 и SVID, но не вошедших в стандарт IEEE Std1003.1-2001.

comm -12 xpg3 svid89 | comm -23 - xcu

Листинг 6.22. Пример использования служебной программы comm.

Для контроля целостности файлов (не являющегося, впрочем, криптостойким), предназначена служебная программа

cksum [файл ...]

Для каждого файла - аргумента она выдает на стандартный вывод подсчитанную по стандарту ISO/IEC 8802-3:1996 (Ethernet) контрольную сумму, количество байт и имя.

Применение утилиты cksum - полезный элемент оформления поставляемых приложений.




Начало  Назад  Вперед



Книжный магазин