Существует множество способов сравнить текстовые файлы в системе Linux из командной строки. В этом посте описаны семь команд, которые могут помочь вам в этом, и объясняется, как интерпретировать результаты.
Чтобы вы могли лучше понять приведенные ниже команды, два файла, используемых в этом посте – file1 и file2 – содержат эти строки:
Kids, the seven basic food groups are gum, puff pastry, pizza, pesticides, antibiotics, and milk duds!!
Третий файл, file3, содержит эти строки:
Kids, the six basic food groups are fruits, vegetables, grains, protein and dairy and milk duds!!
Команда diff — одна из самых простых команд для определения различий между двумя текстовыми файлами. В первой команде ниже мы сравниваем два файла, которые просто оказались идентичными. В результате выходных данных нет. Во второй команде мы сравниваем два файла с разным содержимым. Символы < и > относятся к первому и второму файлам, а три тире разделяют содержимое и отображают те строки, которые отличаются. Любое идентичное содержимое в этих файлах опущено – как и строка “и milk duds !!” .
$ diff file1 file2 $ diff file1 file3 1,4c1,3 < Kids, the seven basic food < groups are gum, puff pastry, < pizza, pesticides, antibiotics, < and milk duds!! --- > Kids, the five basic food > groups are fruits, vegetables, > grains, protein and dairy
Команда comm будет сравнивать текстовые файлы, но у нее есть одно особое требование. Предполагается, что содержимое файла должно быть отсортировано. В приведенном ниже примере вы увидите некоторые жалобы при использовании несортированного содержимого файла.
$ comm file1 file3 Kids, the five basic food comm: file 2 is not in sorted order groups are fruits, vegetables, grains, protein and dairy Kids, the seven basic food comm: file 1 is not in sorted order groups are gum, puff pastry, pizza, pesticides, antibiotics, and milk duds!! comm: input is not in sorted order
Если бы файлы сортировались первыми, выходные данные отображались бы в виде столбцов, как показано ниже. В первом столбце отображаются только строки из первого файла. В среднем столбце будут отображаться строки только во втором файле. Строки, существующие в обоих файлах, будут отображаться в последнем столбце.
$ sort file1 > f1; sort file3 > f3 $ comm f1 f3 and milk duds!! grains, protein and dairy groups are fruits, vegetables, groups are gum, puff pastry, Kids, the seven basic food Kids, the six basic food pizza, pesticides, antibiotics,
Команда cmp без дополнительных опций подтверждает, что файлы разные, и указывает положение первого отличия. В данном случае, это 12— й знак в первой строке.
$ cmp file1 file3 file1 file3 differ: byte 12, line 1 As with the diff command, there is no output if the files have identical content. $ cmp file1 file2
Команда diff3 похожа на команду diff, но позволяет сравнивать три файла вместо двух. Кроме того, формат выходных данных сильно отличается. Символ ====3, включенный в выходные данные ниже, означает, что третий файл отличается. Затем он показывает различия между первыми двумя файлами и третьим.
$ diff3 file1 file2 file3 ====3 1:1,3c 2:1,3c Kids, the seven basic food groups are gum, puff pastry, pizza, pesticides, antibiotics, 3:1,3c Kids, the six basic food groups are fruits, vegetables, grains, protein and dairy
Команда sdiff сравнивает файлы параллельно. В первом примере вы можете видеть, что содержимое обоих файлов одинаковое. Во втором примере в обоих файлах одинакова только последняя строка, а вертикальная полоса, отмечающая различия в первых строках, отсутствует.
$ sdiff file1 file2 Kids, the seven basic food Kids, the seven basic food groups are gum, puff pastry, groups are gum, puff pastry, pizza, pesticides, antibiotics, pizza, pesticides, antibiotics, and milk duds!! and milk duds!! $ sdiff file1 file3 Kids, the seven basic food | Kids, the six basic food groups are gum, puff pastry, | groups are fruits, vegetables, pizza, pesticides, antibiotics, | grains, protein and dairy and milk duds!! and milk duds!!
Команда colordiff отображает различия между двумя файлами, как команда diff, но добавляет цвет, когда содержимое отличается. Первая команда, приведенная ниже, не выводится, поскольку файлы одинаковые. Вторая отображает различия между двумя файлами. На экране вашего компьютера шрифт, используемый для первого набора строк, будет красным, а для второго — зеленым.
$ colordiff file1 file2 $ colordiff file1 file3 1,3c1,3 < Kids, the seven basic food < groups are gum, puff pastry, < pizza, pesticides, antibiotics, --- > Kids, the six basic food > groups are fruits, vegetables, > grains, protein and dairy
Команда wdiff отображает содержимое сравниваемых файлов (одну копию), если они идентичны. Если они разные, различия отмечаются с помощью квадратных скобок, знаков «минус» и «+» для обозначения их расположения, как во втором примере ниже.
$ wdiff file1 file2 Kids, the seven basic food groups are gum, puff pastry, pizza, pesticides, antibiotics, and milk duds!! $ wdiff file1 file3 Kids, the [-seven-] {+six+} basic food groups are [-gum, puff pastry, pizza, pesticides, antibiotics,-] {+fruits, vegetables, grains, protein and dairy+} and milk duds!!
Не воспринимайте ограниченные команды в этом посте как означающие, что у этих команд нет дополнительных опций. Используйте команду типа wdiff –help, чтобы получить список опций команды.