2009-04-20 12 views

Antwort

10

Wenn Sie diff verwenden -u es eine einheitliche diff zu generieren, die Linien voran mit + und hat -. Wenn Sie Rohr, dass die Ausgabe durch grep (um nur die + oder -) und dann zu den Toiletten, um die Zählungen für das + es zu bekommen und das - es ist.

+1

Dank, hier ist Bash-Shell scriptlet für die gleiche diff -u -s "$ file1" "$ file2"> "$ diff_file" add_lines = 'cat "$ diff_file" | grep^+ | wc -l' del_lines = 'cat" $ diff_file "| grep^- | wc -l # igonre diff header (die mit @@ beginnen) at_lines = 'cat" $ diff_file "| grep^@ | wc -l' chg_lines = 'cat" $ diff_file "| wc -l chg_lines = 'expr $ chg_lines - $ add_lines - $ del_lines - $ at_lines' # Kopfzeilen von count abziehen (die mit +++ & --- beginnen) add_lines =' expr $ add_lines - 1' del_lines = 'expr $ del_lines - 1' total_change =' ausdr $ chg_lines + $ add_lines + $ del_lines' – suyasha

+0

@suyasha: Kannst du das richtig posten, als Antwort mit Zeilenumbrüchen? Ich wäre daran interessiert, es auszuführen. –

78

Ich denke, dass Sie nach Diffstat suchen. Schicke einfach die Ausgabe von diff an diffstat und du solltest so etwas bekommen.

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

Danke: das ist genau das Werkzeug, das ich wollte. –

+1

Für diejenigen von uns auf einem Mac, der Homebrew installiert. Installieren Sie es einfach über 'brew install diffstat'. –

11

Für diejenigen mit Git oder Mercurial, eine schnelle Möglichkeit, eine solche Zusammenfassung von Einsen unstaged Änderungen zu sehen: von suyasha

git diff --stat 
hg diff --stat 
2

Hier ist das Skript alle korrekt formatiert mit Zeilenumbrüche, mit einigen zusätzlichen Nachrichten ausgegeben. Gute Arbeit, Suyasha, sollte deine Antwort als Antwort geschrieben haben. Ich hätte dafür gestimmt.

#!/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" 
Verwandte Themen