дифференцируя два файла и получая уникальный результат в третьем

Я очень новичок в написании сценариев и изучении его сейчас.

У меня два файла.

Файл 1:

1 StartInstall, CDM_2.5B263, OK 2 EndInstall, CDM_2.5B263, SUCCESS 3 StartPatch, CDM_2.5.0.2B1, OK 4 StartPatch, CDM_2.5.0.3B1, OK 5 EndPatch, CDM_2.5.0.3B1, SUCCESS 

Файл 2:

 1 StartInstall, CDM_2.5B263, OK 2 EndInstall, CDM_2.5B263, SUCCESS 4 StartPatch, CDM_2.5.0.3B1, OK 5 EndPatch, CDM_2.5.0.3B1, SUCCESS 

Я должен найти разницу в файле 2 по сравнению с файлом 1. Если какая-либо строка отсутствует, сценарий оболочки должен указать пропущенную строку и записать ее в другой текстовый файл (ex result.txt ). Сценарий оболочки также должен указать мне, что пропущенная линия находится между двумя линиями.

Например, выход должен выглядеть как в Error.txt :

 3 StartPatch, CDM_2.5.0.2B1, OK 

Между 2 и 4

Использование comm , поскольку файлы сортируются:

 comm -3 file1 file2 > result.txt 

Вывод содержит строки, которые присутствуют в file1 но не file2 , а также строки, которые присутствуют в file2 но не file1 префиксом вкладки.

Если файлы не отсортированы, сначала выполните их сортировку. Предполагая, что вы используете bash, ksh или zsh и не просто sh :

 comm -3 <(sort file1) <(sort file2) > result.txt 

Это, наверное, самый простой способ. Уведомление < является упущением и | указывает, что символ в строке отличается. (Строка 5 в file1.txt некоторые пробельные символы, отсутствующие в вашей копии).

$ diff -y file1.txt file2.txt > diff.txt

 1 StartInstall, CDM_2.5B263, OK 1 StartInstall, CDM_2.5B263, OK 2 EndInstall, CDM_2.5B263, SUCCESS 2 EndInstall, CDM_2.5B263, SUCCESS 3 StartPatch, CDM_2.5.0.2B1, OK < 4 StartPatch, CDM_2.5.0.3B1, OK 4 StartPatch, CDM_2.5.0.3B1, OK 5 EndPatch, CDM_2.5.0.3B1, SUCCESS | 5 EndPatch, CDM_2.5.0.3B1, SUCCESS 

Это не выводит новый файл, но вы получаете сеанс vimdiff, который визуально сравнивает эти два файла и выделяет недостающие строки и символы очень интуитивно.

$ vimdiff file1.txt file2.txt