我想逐行找出 2 个(如果可能的话是 3 个)文件的差异。 diff 实用程序可以做到这一点,但它给出的结果不准确。因为,2 个文件的行数恰好是“134”。但 diff 给出了“添加的行”和“删除的行”。然而这是错误的,它们的行数完全相同,没有添加或删除行。
我想要查找差异的文本文件中只写了数字,也许这就是该算法失败的原因。我找不到任何选项来阻止这种情况,但我可能是错的,我的意思是应该有一个选项,但我还是找不到。
这是我得到的结果(5am.txt 与 6am.txt 相比,存在很大的问题):
这就是我想要的(6am.txt 与 7am.txt,仍然存在问题):
编辑:
在我发现没有实用程序可以做到这一点后,我自己处理了这个问题。我几乎做了和 RedGrittyBrick 所做的一样的事情。这个脚本模仿了 diff 实用程序,所以我(或你)可以将其与 diff2html 一起使用。
要与 diff2html 一起使用,只需更改行
diff_stdout = os.popen("diff %s" % string.join(argv[1:]), "r")
到
diff_stdout = os.popen("script.py %s" % string.join(argv[1:]), "r")
并随意命名此脚本(需要Python 2.x执行,如 diff2html):
import sys
f1=open(sys.argv[1],"r")
f1_read=f1.readlines()
f1.close()
f2=open(sys.argv[2],"r")
f2_read=f2.readlines()
f2.close()
changed={}
first_c = ""
for n in range(len(f1_read)):
if f1_read[n]!=f2_read[n]:
if first_c == "":
first_c=n+1
changed[first_c]=n+1
else:
first_c=""
#Let's imitate diff-utils...
for (x, y) in changed.items():
print "%d,%dc%d,%d" % (x,y,x,y)
for i in range(x,y+1):
sys.stdout.write("< %s" % f1_read[i-1])
print "---"
for i in range(x,y+1):
sys.stdout.write("> %s" % f2_read[i-1])
最终结果:
答案1
diff 假定第二个文件可能不仅通过编辑行来创建,而且还通过插入和删除行来创建。
如果您只想知道哪些行不同而不考虑插入或删除的行,则可以使用更简单的方法。
$perl d.pl a b | less
1: 255, 107 DIFFERENT!
2: 197, 148 DIFFERENT!
3: 113, 165 DIFFERENT!
4: 0, 221 DIFFERENT!
5: 0, 153 DIFFERENT!
6: 0, 85 DIFFERENT!
7: 48, 255 DIFFERENT!
8: 61, 187 DIFFERENT!
9: 63, 85 DIFFERENT!
10: 3, 0 DIFFERENT!
11: 49, 0 DIFFERENT!
12: 58, 15 DIFFERENT!
13: 47, 0 DIFFERENT!
14: 62, 0 DIFFERENT!
15: 61, 0 DIFFERENT!
16: 255, 255 same
17: 255, 255 same
18: 255, 255 same
19: 255, 255 same
20: 255, 255 same
21: 255, 255 same
其中 d.pl 是
#!/usr/bin/perl
use strict;
use warnings;
open my $f1, '<', $ARGV[0] or die "Can't read '$ARGV[0]' - $!\n";
open my $f2, '<', $ARGV[1] or die "Can't read '$ARGV[1]' - $!\n";
while (my $f1_line = <$f1>) {
my $f2_line = <$f2>;
chomp for $f1_line, $f2_line;
my $verdict = $f1_line eq $f2_line ? 'same' : "DIFFERENT!";
printf "%3d: %5d, %5d %s\n", $., $f1_line, $f2_line, $verdict;
}
close $f2;
close $f1;
答案2
要并排比较文件,我最喜欢的工具是记事本++。
安装后,在工具栏上单击插件>插件管理器>可用,并选中比较和安装。
重新启动 Notepad++ 后,打开两个文件(它们将在不同的选项卡中打开),然后在工具栏中转到插件>比较>比较。
您可以进行多种调整,但比较文件看起来是这样的:
其中白色文本表示未改变,红色表示删除,绿色表示添加,侧边栏显示两个文件中这些更改的概览。