2011-06-10 43 views
3

我有兩個約134 MB的CSV文件。如何獲得UNIX diff以忽略不同位置中的重複行?

我想要做的就是獲得兩個文件的'差異',除了一行的位置並不重要。

換句話說,假設我有:

abc,123 
def,456 

def,456 
ghi,789 

我不想被告知閃避,456。它在第二個文件中處於不同的位置,但我希望它被視爲沒有不同。

只是在執行diff file1 file2> outputfile不起作用。我應該用什麼命令來做到這一點?我知道這在PHP中是微不足道的,但我很快就用完了內存。我寧願只使用UNIX命令行工具。差異甚至可能不是這方面的正確工具。

+2

重要的是文件的順序?如果沒有,你可以先排序他們之前比較? – ribram 2011-06-10 21:53:53

+0

我很困惑,因爲這兩個示例文件已經排序。它會比較abc,123與def,456並且說它不同,即使def,456都出現在兩個文件中。 – Phil 2011-06-10 22:07:08

+0

當我diff上述我得到1d0 ghi,789 它沒有提到高清是不同的。你希望他們排序,希望匹配線足夠接近,以避免被報告爲不同。 – ribram 2011-06-10 22:12:52

回答

0

對不起,什麼差異是確定這樣的差異。我想你想要的是一個工具,它標識:

1 
2 
3 

和:

3 
1 
2 

視爲相同。沒有我知道的工具是這樣做的(但我可能會在某個時候將它添加到我的http://code.google.com/p/csvfix/工具中)。

你目前需要做的是對兩個文件進行排序,然後進行比較。

2

我會建議你做兩個輸入文件sort,然後比較這兩個排序的版本,像這樣:

sort file1 > sorted_1 
sort file2 > sorted_2 

diff sorted_1 sorted_2