Quiero tener un resumen de la diferencia entre dos archivos. El resultado esperado es el recuento de líneas nuevas, eliminadas y modificadas. ¿Dif fácilmente proporciona tal salida? Si no, ¿hay alguna secuencia de comandos/utilidad disponible que ayude a obtener el resumen?Cómo obtener diff para informar el resumen de líneas nuevas, modificadas y eliminadas
Respuesta
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.
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(-)
Gracias: esa es exactamente la herramienta que quería. –
Para aquellos de nosotros en una Mac que instaló Homebrew. Simplemente instálelo a través de 'brew install diffstat'. –
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
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"
- 1. Resaltar líneas modificadas en Eclipse
- 2. ¿Existe una biblioteca .NET para comparar archivos y que devuelve colecciones enumerables de líneas agregadas, modificadas y eliminadas?
- 3. diff para líneas simples
- 4. Cómo guardar entidades separadas (nuevas + modificadas) separadas en Entity Framework?
- 5. Cómo eliminar retornos de carro y nuevas líneas en Postgresql?
- 6. Git diff --stat explicación
- 7. ¿Cómo puedo calcular el número de líneas modificadas entre dos confirmaciones en git?
- 8. ¿El mejor método para leer archivos delimitados por líneas nuevas en Python y descartar las nuevas líneas?
- 9. PHP múltiples líneas nuevas
- 10. ¿Cómo puedo obtener más colores en emacs vc-diff?
- 11. ¿Nuevas líneas con ConfigParser?
- 12. newline-ignooring diff/diff en múltiples líneas/reflow-ignooring diff
- 13. ¿Cómo identificar y eliminar líneas nuevas y espacios en blanco?
- 14. Regexps en Elisp para incluir líneas nuevas
- 15. ¿Hay alguna manera de agregar líneas de presentación de git, cambiar líneas y eliminar líneas?
- 16. Obtener imagen y resumen pertinente de URL
- 17. ¿Cómo obtener el número de filas eliminadas en PostgreSQL?
- 18. cómo eliminar nuevas líneas y retornos de php string?
- 19. ¿Cómo se obtiene un resumen de diff de Subversion para ignorar las propiedades de mergeinfo?
- 20. Comparando 2 revisiones con svn diff (v 1.3.2) y solo obtiene las rutas modificadas?
- 21. ASP.NET MVC Html.Encode - Nuevas líneas
- 22. Conservar líneas nuevas en YAML
- 23. cómo mostrar líneas en común (diff inverso)?
- 24. ¿Cómo manejo las nuevas líneas en JSON?
- 25. ¿Cómo contar la cantidad de líneas modificadas o agregadas en una rama SVN?
- 26. ¿Cálculo de líneas totales agregadas/eliminadas después de una fusión?
- 27. ¿Cómo se obtiene vim para mostrar líneas envueltas sin insertar líneas nuevas?
- 28. Líneas nuevas de Unix a ventanas nuevas (en Windows)
- 29. ¿Cómo acelerar el resumen y ddply?
- 30. Normalizar nuevas líneas en C#
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
@suyasha: ¿Podría publicarlo correctamente, como una respuesta con saltos de línea? Estaría interesado en ejecutarlo. –