Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 比较两个文件中顺序不一致的相同行';没关系_File_Comparison - Fatal编程技术网

File 比较两个文件中顺序不一致的相同行';没关系

File 比较两个文件中顺序不一致的相同行';没关系,file,comparison,File,Comparison,我有两个文件(可能长达150000行;每行160字节),我想检查一下每行中的行是否相同diff对我来说(直接)不起作用,因为在两个文件中有一小部分行以不同的顺序出现。通常,一对线将被转置。 如果两个文件中出现相同的行,但顺序不重要,那么最好的方法是什么? 谢谢 Chris对于仅150k行,只需对每行进行散列,并将它们按顺序存储在查找表中。然后,对于文件2中的每一行,只需执行查找。尽管这是一种稍微昂贵的方法(对于更大的问题,我会重新考虑),但我会启动python并执行以下操作: filename1

我有两个文件(可能长达150000行;每行160字节),我想检查一下每行中的行是否相同
diff
对我来说(直接)不起作用,因为在两个文件中有一小部分行以不同的顺序出现。通常,一对线将被转置。
如果两个文件中出现相同的行,但顺序不重要,那么最好的方法是什么? 谢谢
Chris

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

尽管这是一种稍微昂贵的方法(对于更大的问题,我会重新考虑),但我会启动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

如果行不同,将打印不同的行。

另一个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)
#/usr/bin/env python
导入系统
file1=sys.argv[1]
file2=sys.argv[2]
lines1=打开(文件1,'r')。readlines()
lines2=打开(文件2,'r')。readlines()
行1.sort()
lines2.sort()
s=“”
对于i,枚举中的行(第1行):
如果行2[i]!=行:
打印'>%s''行
打印“<%s”%lines2[i]
s=‘不是’
打印“文件%s是%s,类似于文件%s%”(文件1,s,文件2)

谢谢-我刚刚用Python写了一些类似的东西,因为现在已经没有时髦的Unix巫毒魔法了。问题解决了!对每个文件进行排序,然后运行diff?是的(+1),你完全正确,我只是讨厌使用临时文件!在python中,我可以在15秒内得到答案并访问python变量中的不同行。。。