我尝试使用此命令来计算两个文件之间更改的行数:
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
这对我有用