如何得到差异报告新的,改变和删除行的摘要

我想有两个文件之间的区别总结。 预期的输出是新的,删除和改变的行数。 diff是否容易提供这样的输出? 如果没有,有任何可用的脚本/实用程序,这有助于获得摘要。

如果使用diff -u,则会生成一个统一的差异,其中前面带有+ 。 如果你通过grep输出输出(只得到+ ),然后inputwc,则分别得到+ es和-es的计数。

我想你正在寻找diffstat。 只需将diff的输出传递给diffstat,你应该得到像这样的东西。

  include/net/bluetooth/l2cap.h | 6 ++++++ net/bluetooth/l2cap.c | 18 +++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) 

对于那些使用GitMercurial的人来说 ,快速浏览一下这些未分类变化的总结:

 git diff --stat hg diff --stat 

这里是由suyasha脚本所有格式正确与换行符,与一些添加消息输出。 好的,suyasha,应该已经回复你的答复了。 我会投这个票。

 #!/bin/bash # USAGE: diffstat.sh [file1] [file2] if [ ! $2 ] then printf "\n USAGE: diffstat.sh [file1] [file2]\n\n" exit fi diff -u -s "$1" "$2" > "/tmp/diff_tmp" add_lines=`cat "/tmp/diff_tmp" | grep ^+ | wc -l` del_lines=`cat "/tmp/diff_tmp" | grep ^- | wc -l` # igonre diff header (those starting with @@) at_lines=`cat "/tmp/diff_tmp" | grep ^@ | wc -l` chg_lines=`cat "/tmp/diff_tmp" | wc -l` chg_lines=`expr $chg_lines - $add_lines - $del_lines - $at_lines` # subtract header lines from count (those starting with +++ & ---) add_lines=`expr $add_lines - 1` del_lines=`expr $del_lines - 1` total_change=`expr $chg_lines + $add_lines + $del_lines` rm /tmp/diff_tmp printf "Total added lines: " printf "%10s\n" "$add_lines" printf "Total deleted lines:" printf "%10s\n" "$del_lines" printf "Modified lines: " printf "%10s\n" "$chg_lines" printf "Total changes: " printf "%10s\n" "$total_change"