Voglio avere un riepilogo delle differenze tra due file. L'output previsto è il conteggio di linee nuove, cancellate e modificate. Il diff fornisce prontamente tale output? In caso contrario, sono disponibili script/utilità che aiutano a ottenere il riepilogo.Come ottenere diff per segnalare il riepilogo delle righe nuove, modificate e cancellate
risposta
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.
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(-)
Grazie: questo è esattamente lo strumento che volevo. –
Per quelli di noi su un Mac che ha installato Homebrew. Basta installarlo tramite 'brew install diffstat'. –
Per coloro che utilizzano Git o Mercurial, un modo rapido per vedere una sintesi di quelli cambiamenti unstaged:
git diff --stat
hg diff --stat
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"
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
@suyasha: Potresti postarlo correttamente, come risposta con interruzioni di riga? Sarei interessato a eseguirlo. –