2010-11-12 20 views
2

我有两个文件(可能长达150,000行,每行160字节),我想检查是否行每个都是一样的。 diff不适用于我(直接),因为在这两个文件中,一小部分线条以不同的顺序出现。通常,一对线将被换位。
查看两个文件中是否出现相同的行,但顺序无关紧要的最佳方法是什么? 谢谢, 克里斯比较两个文件的顺序无关紧要的相同行

回答

3

虽然这是一个稍贵的方式来做到这一点(对于更大的东西我会重新考虑这一点),我就火了Python和执行以下操作:

filename1 = "WHATEBVER YOUR FILENAME IS" 
filename2 = "WHATEVER THE OTHER ONE IS" 
file1contents = set(open(filename1).readlines()) 
file2contents = set(open(filename2).readlines()) 
if file1contents == file2contents: 
    print "Yup they're the same!" 
else: 
    print "Nope, they differ. In file2, not file1:\n\n" 
    for diffLine in file2contents - file1contents: 
     print "\t", diffLine 
    print "\n\nIn file1, not file2:\n\n" 
    for diffLine in file1contents - file2contents: 
     print "\t", diffLine 

这会打印出不同的线路,如果他们不同。

+0

谢谢 - 我只是用Python写的类似的东西,因为没有时髦的Unix巫术做了。问题解决了! – xnx 2010-11-12 14:02:41

+3

对每个文件进行排序然后运行diff? – 2010-11-12 14:07:41

+0

是的(+1),你100%正确,我只是讨厌使用临时文件!在python 15秒内,我可以得到答案,并有权访问python变量中的不同行... – Crisfole 2010-11-12 14:15:12

1

只有150k行,只是散列每行,并将它们存储在查找表中排序。然后,对于文件2中的每一行,只需执行查找。

0

另一个python脚本来做到这一点:

#!/usr/bin/env python 
import sys 

file1 = sys.argv[1] 
file2 = sys.argv[2] 

lines1 = open(file1,'r').readlines() 
lines2 = open(file2,'r').readlines() 
lines1.sort() 
lines2.sort() 

s = '' 
for i,line in enumerate(lines1): 
    if lines2[i] != line: 
     print '> %s' % line 
     print '< %s' % lines2[i] 
     s = 'not' 

print 'file %s is %s like file %s' % (file1, s, file2)