題 GUI軟件比較兩個文件,獲得差異的“清潔”輸出?


有沒有辦法對文件之間的差異進行“乾淨”導出?不是差異,甚至是格式化的報告......只是一個乾淨的.CSV / .XLS / etc導出。

這適用於非技術人員;我們公司有很多非技術人員可以真正使用這樣的東西。它們與郵件列表一起使用,需要一種方法來提取列表修訂之間的更改。

作為一名程序員,我知道有大量的diff工具:WinDiff,BeyondCompare,FileMerge,命令行差異等等。但我還是找不到一個只能乾淨地輸出差異的工具。 (我可能只是錯過了我列出的眾所周知的差異工具之一)

例...

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-files-and-re


3
2017-12-27 18:21


起源


對於純文本文件,大多數Unix系統都有 comm -1 -3。 - grawity
因此,您需要在一個工具中使用“diff viewer”和“diff exporter”。或者“僅出口商”是否足夠?例如。如果您希望它按計劃任務運行,並且用戶只能看到diff文件。 - Raffael


答案:


你可以使用標準 diff 一些腳本的工具。

對於兩個示例文件,plain diff 將輸出:

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

< 意思是“刪除線”, > “添加線”。只是過濾 > 獲取第二個文件中的所有行,但不在第一個文件中:

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

(該 cut 部分過濾掉領先 >)。你可以將它放入腳本中。

注意:以上假設您有 diffgrep & cut 安裝。它們是Linux和Mac OS X的標準配置(我相信);對於Windows,你需要Cygwin或類似的。


2
2018-02-09 10:24