我希望获得两个文件之间已更改的行数。 diff / diffstat没有给我正确的结果。
例如,如果file1看起来像 -
if(x==2){
System.out.println("TEST");
}
if(y==2){
}
System.out.println("finished");
和file2看起来像
if(x==2){
System.out.println("TEST22");
}
if(y==2){
System.out.println("second");
}
我们应该看到有一个修改计数。
任何帮助都将不胜感激。
EDIT ----
抱歉,伙计们,我明白你的来源。 所以我想知道的是例如当一条线发生变化时 System.out.println(“TEST”) - >的System.out.println( “TEST2”);但是我们还有一个已插入的行和另一行已被删除的行。 在diff / diffstat中,它将插入和删除计为修改,但我不想这样做。
答案 0 :(得分:1)
区别在于:
@@ -2 +2 @@
- System.out.println("TEST");
+ System.out.println("TEST22");
@@ -4,0 +5 @@
+ System.out.println("second");
@@ -6 +6,0 @@
-System.out.println("finished");
如果你想计算一组变化的行,那很简单。
$ diff -u0 file1 file2 | tail -n +3 | grep '^@' | wc -l
3
如果您将编辑计为删除加上添加,那也很简单。
$ diff -u0 file1 file2 | tail -n +3 | grep -v '^@' | wc -l
4
如果将已编辑的行计为单个更改,则会更复杂。
$ diff -u0 file1 file2 | tail -n +3 | perl -e'
use strict;
use warnings;
use List::Util=min qw( min );
my $diffs = 0;
my $dels = 0;
my $adds = 0;
while (<>) {
++$adds, next if /^\+/;
++$dels, next if /^-/;
$diffs += $adds + $dels - min($dels, $adds);
$dels = 0;
$adds = 0;
}
$diffs += $adds + $dels - min($dels, $adds);
print("$diffs\n");
'
3