two online files ejemplo directories contents unix diff

unix - online - linux diff files



Cómo obtener diff para informar el resumen de líneas nuevas, modificadas y eliminadas (4)

Quiero tener resumen de la diferencia entre dos archivos. La salida esperada es el número de líneas nuevas, eliminadas y modificadas. ¿Ofrece diff fácilmente tal salida? Si no, hay algún script / utilidad disponible que ayude a obtener el resumen.


Aquí está la secuencia de comandos de suyasha, todas formateadas correctamente con saltos de línea, con algunos resultados de mensajes agregados. Buen trabajo, suyasha, debería haber publicado tu respuesta como respuesta. Yo 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"


Creo que estás 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(-)


Para aquellos que usan Git o Mercurial , una manera rápida de ver un resumen de estos cambios sin etapas :

git diff --stat hg diff --stat


Si usa diff -u, generará un diff unificado que tiene líneas precedidas con + y - . Si canaliza esa salida a través de grep (para obtener solo el + o - ) y luego a wc obtiene los conteos para los + es y los - es respectivamente.