10/30/2008 Ubuntu 8.10
06/19/2008 SUSE 11.0
05/13/2008 Fedora 9
04/24/2008 Ubuntu 8.04
11/08/2007 Fedora 8
10/18/2007 Ubuntu 7.10
10/04/2007 SUSE 10.3
05/31/2007 Fedora 7
04/19/2007 Ubuntu 7.04
Отметьте также, что по умолчанию в качестве разделителя полей во входных данных join использует символы табуляции, а в выводе — пробел. Такое поведение можно изменить с помощью параметров. За дополнительными подробностями обращайтесь к странице справочного руководства (man) для join.
Сравнение текста
Довольно часто бывает необходимо сравнить версии текстовых файлов. Для системных администраторов и разработчиков программного обеспечения это особенно важно. Системному администратору, например, может понадобиться сравнить имеющийся конфигурационный файл с предыдущей версией, чтобы понять суть возникшей проблемы. Аналогично, программисту часто бывает необходимо увидеть изменения, происшедшие в программе с течением времени.
comm — построчное сравнение двух сортированных файлов
Программа comm сравнивает два текстовых файла, показывая, какие строки в них уникальные, а какие — одинаковые. Для демонстрации создадим с помощью cat два почти идентичных файла:
[me@linuxbox ~]$ cat > file1.txt
a
b
c
d
[me@linuxbox ~]$ cat > file2.txt
b
c
d
e
Затем сравним эти два файла с помощью comm:
[me@linuxbox ~]$ comm file1.txt file2.txt
a
b
c
d
e
Как видите, comm произвела вывод в три колонки. Первая колонка содержит уникальные строки из первого файла, вторая — уникальные строки из второго файла, третья — строки, одинаковые в обоих файлах. Программа comm поддерживает параметры в формате -n, где n может быть числом 1, 2 или 3. При использовании эти параметры определяют номера колонок, вывод которых следует подавить. Например, чтобы вывести только одинаковые строки, нужно подавить вывод колонок 1 и 2:
[me@linuxbox ~]$ comm -12 file1.txt file2.txt
b
c
d
diff — построчное сравнение файлов
Подобно программе comm, diff используется для выявления различий между файлами. Однако diff намного более сложный инструмент, поддерживающий вывод во множестве форматов и способный обрабатывать сразу огромные коллекции файлов. Программа diff часто используется разработчиками программного обеспечения для исследования различий между разными версиями исходного программного кода, потому что позволяет рекурсивно обходить каталоги, которые часто называют
Если применить diff к файлам из предыдущего примера, можно увидеть стиль вывода результатов ее работы по умолчанию: краткое описание различий между двумя файлами.
[me@linuxbox ~]$ diff file1.txt file2.txt
1d0
< a
4a4
> e
В формате по умолчанию каждой группе изменений предшествует
Таблица 20.4. Команды изменения, генерируемые программой diff
Команда
Описание
r1ar2
Добавить строки, находящиеся в диапазоне r2 во втором файле, после строк в позиции r1 в первом файле
r1cr2
Изменить (заменить) строки в диапазоне r1 в первом файле строками в диапазоне r2 во втором файле
r1dr2
Удалить строки в диапазоне r1 в первом файле, которые находились бы в диапазоне r2 во втором файле
В этом формате любой диапазон представлен списком через запятую номеров начальной и конечной строки. Хотя этот формат используется по умолчанию (главным образом для совместимости со стандартом POSIX и обратной совместимости с традиционными версиями diff для Unix), он не так широко используется, как другие, дополнительные форматы. Два других формата, получивших большую популярность, — это
При использовании контекстного формата (параметр -c) вывод выглядит так:
[me@linuxbox ~]$ diff -c file1.txt file2.txt
*** file1.txt 2012-12-23 06:40:13.000000000 -0500
--- file2.txt 2012-12-23 06:40:34.000000000 -0500
***************
*** 1,4 ****
- a
b
c
d
--- 1,4 ----
b
c
d
+ e