2つのファイルの違いの概要を知りたい。予想される出力は、新規、削除、および変更された行の数です。 diffはすぐにそのような出力を提供しますか?そうでない場合、要約を取得するのに役立つスクリプト/ユーティリティが利用可能です。
Diff -uを使用すると、行の前に+および-が付いた統一されたdiffが生成されます。その出力をgrepにパイプして(+または-のみを取得する)、次にwcに+ esおよび- esそれぞれ。
diffstat
を探していると思います。 diff
の出力をdiffstat
にパイプするだけで、次のような結果が得られます。
include/net/bluetooth/l2cap.h | 6 ++++++
net/bluetooth/l2cap.c | 18 +++++++++---------
2 files changed, 15 insertions(+), 9 deletions(-)
GitまたはMercurialを使用している人のために、そのようなものの概要をすばやく確認する方法nstaged changes:
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"