比较两个文件,忽略顺序

34

我有两个文件,它们的行顺序无关紧要,我想比较它们的内容。

我查看了diff文档,但没有找到像--ignore-order这样的东西。

有什么提示吗?


请查看我在 https://unix.stackexchange.com/questions/23303/diff-where-lines-are-mostly-the-same-but-out-of-order 上的答案。 - Chris Koknat
3个回答

68

首先对文件进行排序:

$ sort file1 > file1.sorted
$ sort file2 | diff - file1.sorted

此外,虽然我个人不鼓励这样做,但如果你在使用bash并且该功能已在系统上启用,你可以通过使用进程替换来避免临时文件:

$ diff <(sort file1) <(sort file2)

2

不使用bash,而是使用Python的快速方法:

def check_diff(file1,file2):
    check = {}
    for file in [file1,file2]:
        with open(file,'r') as f:
            check[file] = []
            for line in f:
                check[file].append(line)
    diff = set(check[file1]) - set(check[file2])
    for line in diff:
        print(line.rstrip())

1
也许你从错误的角度看待了这个问题。也许你想先对两个文件进行排序,然后再进行比较?否则,
diff file1 file2 

会完全按照您的要求执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接