代码之家  ›  专栏  ›  技术社区  ›  Zsolt Botykai

如何计算Linux上两个文件之间的差异?

  •  46
  • Zsolt Botykai  · 技术社区  · 15 年前

    我需要处理大文件,必须找出两者之间的区别。我不需要不同的位,但需要不同的位数。

    为了找到我想到的不同的行数

    diff --suppress-common-lines --speed-large-files -y File1 File2 | wc -l
    

    这是可行的,但有更好的方法吗?

    如何计算精确的差异数(使用标准工具,如bash、diff、awk、sed一些旧版本的Perl)?

    6 回复  |  直到 6 年前
        1
  •  41
  •   John Kugelman Syzygies    14 年前
    diff -U 0 file1 file2 | grep -v ^@ | wc -l
    

    上面两个文件名的减2 diff 上市。统一格式可能比并行格式快一点。

        2
  •  44
  •   Josh    13 年前

    如果要计算不同的行数,请使用:

    diff -U 0 file1 file2 | grep ^@ | wc -l
    

    约翰的回答不是把不同的行数了一遍吗?

        3
  •  6
  •   dubiousjim    14 年前

    如果使用Linux/Unix,那么 comm -1 file1 file2 要在文件1中打印不在文件2中的行, comm -1 file1 file2 | wc -l 计算它们,同样的 comm -2 ... ?

        4
  •  4
  •   Michal Nemec    11 年前

    因为每个不同的输出线都以 < > 角色,我建议:

    diff file1 file2 | grep ^[\>\<] | wc -l
    

    只使用 \< \> 在脚本行中,您只能计算其中一个文件中的差异。

        5
  •  1
  •   Neal Gokli mjs    6 年前

    我相信正确的解决办法是 answer ,即:

    $ diff -y --suppress-common-lines a b | grep '^' | wc -l
    1
    
        6
  •  0
  •   Daniel Lee    9 年前

    如果您处理的文件具有类似的内容,应按行对其进行相同的排序(如描述类似内容的csv文件),并且您希望在以下文件中找到2个不同点:

    File a:    File b:
    min,max    min,max
    1,5        2,5
    3,4        3,4
    -2,10      -1,1
    

    您可以在python中实现它,如下所示:

    different_lines = 0
    with open(file1) as a, open(file2) as b:
        for line in a:
            other_line = b.readline()
            if line != other_line:
                different_lines += 1