2010-11-12 18 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)