web-dev-qa-db-ja.com

新規、変更、削除された行の要約をレポートするためにdiffを取得する方法

2つのファイルの違いの概要を知りたい。予想される出力は、新規、削除、および変更された行の数です。 diffはすぐにそのような出力を提供しますか?そうでない場合、要約を取得するのに役立つスクリプト/ユーティリティが利用可能です。

45
suyasha

Diff -uを使用すると、行の前に+および-が付いた統一されたdiffが生成されます。その出力をgrepにパイプして(+または-のみを取得する)、次にwcに+ esおよび- esそれぞれ。

14
lothar

diffstat を探していると思います。 diffの出力をdiffstatにパイプするだけで、次のような結果が得られます。

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

GitまたはMercurialを使用している人のために、そのようなものの概要をすばやく確認する方法nstaged changes

git diff --stat
hg diff --stat
19
stefano

以下は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"
3
Bill-G