Программное обеспечение с графическим интерфейсом для сравнения двух файлов, получить "чистый" экспорт различий?

1586
John Rose

Есть ли способ сделать «чистый» экспорт различий между файлами? Не diff или даже отформатированный отчет ... просто чистый экспорт .CSV / .XLS / etc.

Это для людей, которые не являются техническими; в нашей компании есть ряд нетехнических людей, которые могли бы действительно использовать что-то подобное. Они работают со списками рассылки и нуждаются в способе извлечения изменений между ревизиями списков.

Как программист, я знаю, что существует большое количество инструментов сравнения: WinDiff, BeyondCompare, FileMerge, diff командной строки и т. Д. Но я не смог найти тот, который просто дал бы чистый экспорт различий. (Возможно, я просто что-то пропустил в одном из известных инструментов сравнения, которые я перечислил)

Пример...

FileA.csv

1000, Aaron 1001, Bob 1002, Chris 1004, Erin 

FileB.csv

1000, Aaron 1001, Bob 1002, Chris 1003, Dolores 1004, Edward 

Мы бы хотели экспортировать только измененные строки в ... "ChangesInFileB.csv"

1003, Dolores 1004, Edward 

FWIW, ребята из службы поддержки Beyond Compare говорят, что они этого не предлагают.
http://www.scootersoftware.com/vbulletin/showthread.php?p=32298#post32298

Этот вопрос внешне похож, но не относится к «чистому экспорту» https://superuser.com/questions/294142/can-somebody-recommend-a-program-to-compare-differences-in-two-text- файлы-и-ре

3
Для простых текстовых файлов большинство систем Unix имеют `comm -1 -3`. grawity 12 лет назад 2
Таким образом, вам нужен «просмотрщик различий» и «экспортер различий» в одном инструменте. Или «только экспортера» будет достаточно? Например, если вы хотите, чтобы он выполнялся как запланированная задача, и пользователи видели только файл diff. Raffael 12 лет назад 0

1 ответ на вопрос

2
sleske

Вы можете просто использовать стандартный diffинструмент с некоторыми сценариями.

Для двух файлов примеров, обычный diffвыводит:

4c4,6 < 1004, Erin --- > 1003, Dolores > 1004, Edward 

В <означает «линии удалены», то >«линия добавлена». Просто отфильтруйте, >чтобы получить все строки, которые находятся во втором файле, но не в первом:

$ diff a.csv b.csv |grep '>'|cut -c 3- 1003, Dolores 1004, Edward 

( cutчасть снимает ведущий >). Вы можете поместить это в сценарий.

Примечание: Выше предполагается, что вы имеете diff, grepи cutустановлен. Они стандартные в Linux и Mac OS X (я полагаю); для Windows вам понадобится Cygwin или аналог.