Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Is there a way to do a "clean" export of the differences between files? Not a diff, or even a formatted report... just a clean .CSV/.XLS/etc export.

This is for people that are non-technical; we have a number of nontechnical people in our company that could really use something like this. They work with mailing lists and need a way to extract the changes between list revisions.

As a programmer I know there are a large number of diff tools out there: WinDiff, BeyondCompare, FileMerge, command-line diff, etc. But I haven't been able to find one that will just give a clean export of the differences. (It's possible I've just missed something in one of the well-known diff tools I listed)

Example...

FileA.csv

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

FileB.csv

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

We'd like to export just the changed rows to... "ChangesInFileB.csv"

1003, Dolores
1004, Edward

FWIW, the support guys at Beyond Compare say they don't offer that.
http://www.scootersoftware.com/vbulletin/showthread.php?p=32298#post32298

This question is superficially similar but doesn't address the "clean export" thing Can somebody recommend a program to compare differences in two text files and report the differences?

share|improve this question
2  
For plain text files, most Unix systems have comm -1 -3. –  grawity Dec 27 '11 at 18:29
    
So you need a "diff viewer" and an "diff exporter" in one tool. Or would an "exporter only" be enough too? E.g. If you would have it running as scheduled task and the users see only the diff file. –  Raffael Dec 27 '11 at 20:09
add comment

1 Answer

up vote 1 down vote accepted

You could just use the standard diff tool with some scripting.

For the two examples files, plain diff will output:

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

The < means "line removed", the > "line added". Just filter for > to get all lines that are in the second file, but not in the first:

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

(the cut part filtes out the leading >). You could put that into a script.

Note: The above assumes you have diff, grep & cut installed. They're standard on Linux and Mac OS X (I believe); for Windows you'd need Cygwin or similiar.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.