2009-04-20 6 views

Répondre

10

Si vous utilisez diff -u il va générer un diff unifié qui a des lignes précédées d'+ et -. Si vous redirigez que la sortie par grep (pour obtenir seulement le + ou -) puis vous wc obtenir les chiffres pour les + es et les - es respectivement.

+1

Merci, voici bash shell scriptlet pour la même diff -u -s "$ file1" "fichier2 $"> "diff_file de $" add_lines = 'cat "diff_file de $" | grep^+ | wc -l' del_lines = 'chat" $ diff_file "| grep^- | wc -l' # igonre diff en-tête (ceux commençant par @@) at_lines = 'cat" $ diff_file "| grep^@ | wc -l' chg_lines = "chat" $ diff_file "| wc -l' chg_lines = 'expr $ chg_lines - add_lines $ - $ - del_lines at_lines' $ # lignes d'en-tête de Soustraire de comptage (ceux commençant par +++ & ---) add_lines =' expr add_lines $ - 1' del_lines = 'expr $ del_lines - 1' total_change =' expr $ chg_lines + $ add_lines + $ del_lines' – suyasha

+0

@suyasha: Pourriez-vous poster ce message correctement, comme réponse avec des sauts de ligne? Je serais intéressé de le faire tourner. –

78

Je pense que vous cherchez diffstat. Il suffit de diriger la sortie de diff vers diffstat et vous devriez obtenir quelque chose comme ça.

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

Merci: c'est exactement l'outil que je voulais. –

+1

Pour ceux d'entre nous sur un Mac qui a installé Homebrew. Il suffit de l'installer via 'brew install diffstat'. –

11

Pour ceux qui utilisent Git ou Mercurial, un moyen rapide de voir un résumé de ceux changements Unstaged:

git diff --stat 
hg diff --stat 
2

Voici le script en suyasha tous correctement formaté avec sauts de ligne, avec une sortie de message supplémentaire. Bon travail, suyasha, aurait dû poster votre réponse en guise de réponse. J'aurais voté pour cela.

#!/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" 
Questions connexes