GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo obtener la diferencia (solo adiciones) entre dos archivos en Linux

diff y luego grep para el tipo de edición que desee.

diff -u A1 A2 | grep -E "^\+"

Un enfoque similar a https://stackoverflow.com/a/15385080/337172 pero, con suerte, más comprensible y fácil de modificar:

diff \
  --new-line-format="%L" \
  --old-line-format="" \
  --unchanged-line-format="" \
  A1 A2

La mayor parte de lo siguiente se copia directamente de la respuesta de falla del servidor de @TomOnTime aquí. En la parte inferior hay un intento que funciona en archivos sin ordenar, pero el comando ordena los archivos antes de dar la diferencia, por lo que en muchos casos no será lo que se desea. Para diferencias bien formateadas de archivos sin clasificar, puede encontrar las otras respuestas más útiles (gracias a @Fritz por señalar esto):

Mostrar líneas que solo existen en el archivo a:(es decir, lo que se eliminó de a)

comm -23 a b

Mostrar líneas que solo existen en el archivo b:(es decir, lo que se agregó a b)

comm -13 a b

Mostrar líneas que solo existen en un archivo o en el otro:(pero no en ambos)

comm -3 a b | sed 's/^\t//'

(Advertencia:si el archivo a tiene líneas que comienzan con TAB, (la primera TAB) se eliminará de la salida).

NOTA:Ambos archivos deben ordenarse para que "comm" funcione correctamente. Si aún no están ordenados, debe ordenarlos:

sort <a >a.sorted
sort <b >b.sorted
comm -12 a.sorted b.sorted

Si los archivos son extremadamente largos, esto puede ser una gran carga, ya que requiere una copia adicional y, por lo tanto, el doble de espacio en disco.

Editar:tenga en cuenta que el comando se puede escribir de manera más concisa utilizando la sustitución de procesos (gracias a @phk por el comentario):

comm -12 <(sort < a) <(sort < b)

Puedes probar esto

diff --changed-group-format='%>' --unchanged-group-format='' A1 A2

Las opciones están documentadas en man diff :

       --GTYPE-group-format=GFMT
              format GTYPE input groups with GFMT

y:

       LTYPE is 'old', 'new', or 'unchanged'.
              GTYPE is LTYPE or 'changed'.

y:

              GFMT (only) may contain:

       %<     lines from FILE1

       %>     lines from FILE2

       [...]

Linux
  1. Cómo transferir archivos entre dos computadoras usando los comandos nc y pv

  2. Linux:¿cómo eliminar archivos creados entre dos veces?

  3. ¿Cómo puedo diferenciar dos archivos XML?

  4. ¿Cómo hago una diferencia binaria en dos archivos del mismo tamaño en Linux?

  5. ¿Cómo obtener el tamaño físico de un archivo en Linux?

¿Cuál es la diferencia entre Linux y Unix?

Cómo mostrar dos archivos uno al lado del otro en Linux

Cómo comparar dos archivos en la terminal de Linux

Cómo Rsync archivos entre dos servidores Linux automáticamente

Cómo encontrar archivos con el comando fd en Linux

Diferencia en espacios en blanco entre dos archivos en Linux