2009-04-20 3 views

risposta

10

Se si utilizza diff -u verrà generato un diff unificato che ha preceduto le linee con + e -. Se il tubo che l'output attraverso grep (per ottenere solo il + o -) e poi per WC a ottenere i conteggi per le + es ei - es rispettivamente.

+1

Grazie, ecco la bash shell scriptlet per lo stesso diff -u -s "$ file1" "$ file2"> "$ diff_file" add_lines = 'cat "$ diff_file" | grep^+ | wc -l' del_lines = 'cat" $ diff_file "| grep^- | wc -l' # intestazione diff di igonre (quelli che iniziano 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' # sottrarre le righe di intestazione dal conteggio (quelle che iniziano 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: Potresti postarlo correttamente, come risposta con interruzioni di riga? Sarei interessato a eseguirlo. –

78

Penso che stiate cercando diffstat. Semplicemente pipe l'output di diff a diffstat e dovresti ottenere qualcosa di simile.

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

Grazie: questo è esattamente lo strumento che volevo. –

+1

Per quelli di noi su un Mac che ha installato Homebrew. Basta installarlo tramite 'brew install diffstat'. –

11

Per coloro che utilizzano Git o Mercurial, un modo rapido per vedere una sintesi di quelli cambiamenti unstaged:

git diff --stat 
hg diff --stat 
2

Ecco lo script suyasha tutte formattato correttamente con interruzioni di riga, con alcuni output di messaggi aggiunti. Un buon lavoro, suyasha, avrebbe dovuto pubblicare la tua risposta come risposta. Avrei votato per quello.

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