给定两个文件,如何找到行更改的总数?

给定两个文件,如何找到行更改的总数?

我尝试使用此命令来计算两个文件之间更改的行数:

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

我对这个命令的问题是,如果一个文件只有一行,而另一个文件有 100 行,则输出仍然只是 1。

哪个命令可以告诉我更改的总行数,包括一个文件中的总额外行数?

答案1

查找以 开头的行@会给出找到的更改块的数量diff。它们通常不止一行。

碰巧,有一个工具可以计算差异的统计数据diffstat:(网站,手册页)。

计算插入和删除:

$ diff -u test1 test2 | diffstat
 test2 |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

将同一块中的插入和删除组合为单个“修改”操作:

$ diff -u test1 test2 | diffstat -m
 test2 |    2 -!
 1 file changed, 1 deletion(-), 1 modification(!)

此外,您还可以用来diffstat -t获取仅包含修改行数的表格输出。

测试文件:

$ cat test1
a
b
c
d
$ cat test2
a
x
d

答案2

Cat <file1> <file2> | sort | uniq | wc -l

这对我有用

相关内容