Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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)



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


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.

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
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
up vote 2 down vote accepted

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

For the two examples files, plain diff will output:

< 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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .