2009-04-20 6 views

Respuesta

10

Si utiliza diff -u generará un diff unificado que tiene líneas que empiezan con un + y -. Si la tubería que la salida a través de grep (para obtener sólo el + o -) y luego a WC a obtener los recuentos de los + ES y los - es respectivamente.

+1

Gracias, aquí es fiesta scriplet cáscara para el mismo diff -u -s "$ archivo1" "$ fichero2"> "$ diff_file" add_lines = 'cat "$ diff_file" | grep^+ | wc -l' del_lines = 'cat" $ diff_file "| grep^- | wc -l' # igonre diff header (aquellos que comienzan con @@) 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' # restar líneas de encabezado de count (aquellas que comienzan con +++ & ---) add_lines =' expr $ add_lines - 1' del_lines = 'expr $ del_lines - 1' total_change =' expr $ chg_lines + $ add_lines + $ del_lines' – suyasha

+0

@suyasha: ¿Podría publicarlo correctamente, como una respuesta con saltos de línea? Estaría interesado en ejecutarlo. –

78

Creo que está buscando diffstat. Simplemente canalice la salida de diff a diffstat y debería obtener algo como esto.

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

Gracias: esa es exactamente la herramienta que quería. –

+1

Para aquellos de nosotros en una Mac que instaló Homebrew. Simplemente instálelo a través de 'brew install diffstat'. –

11

Para aquellos que utilizan Git o Mercurial, una forma rápida de ver un resumen de los tales cambios unstaged:

git diff --stat 
hg diff --stat 
2

Aquí es el guión de suyasha todo formateado correctamente con saltos de línea, con algún mensaje de salida agregado. Buen trabajo, suyasha, debería haber publicado tu respuesta como respuesta. Hubiera votado por eso.

#!/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" 
Cuestiones relacionadas