2011-06-10 83 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