Разница между двумя списками с использованием Bash
==================================================

Хорошо, у меня есть два связанных списка на моем окне linux в текстовых файлах:

Мне нужно сравнить эти списки, чтобы увидеть, какие строки были добавлены и какие строки были удалены. Затем мне нужно перебрать эти строки и выполнить над ними действия в зависимости от того, были ли они добавлены или удалены.

Как мне сделать это в Bash?

Использовать`comm(1)` Команда для сравнения двух файлов. Они оба должны быть отсортированы, что вы можете сделать заранее, если они большие, или вы можете сделать это встроенным в Bashprocess substitution.

`comm` может взять комбинацию флагов`-1`, `-2` а также`-3` указание файла для подавления строк (уникального для файла 1, уникального для файла 2 или общего для обоих).

Чтобы получить строки только в старом файле:

Чтобы получить строки только в новом файле:

Вы можете кормить это в`while read` цикл для обработки каждой строки:

и аналогично для новых линий.



Это старый, но для полноты мы должны сказать, что если у вас действительно большой набор, самым быстрым решением будет использование diff для генерации скрипта, а затем его исходный код, например:

Измененные строки будут отображаться как удаленные и добавленные. Если вам это не нравится, вы можете использовать --changed-group-format. Проверьте страницу руководства diff.



Подумайте об использовании Ruby, если ваши скрипты нуждаются в удобочитаемости.

Чтобы получить строки только в старом файле:

Чтобы получить строки только в новом файле:

Вы можете передать это в цикл чтения while для обработки каждой строки:



Я обычно использую:

`grep -v` опция инвертирует совпадение:

-v, --invert-match
 Selected lines are those not matching any of the specified pat-
 terns.

Так что в этом случае он принимает`diff` результаты и опускает те, которые являются общими.



[команда сравнения](http://unixhelp.ed.ac.uk/CGI/man-cgi?diff) сделаю сравнение для вас.

например.,

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



Ты пытался`diff`