GNU/Linux >> Tutoriales Linux >  >> Linux

¿Herramienta para obtener las líneas en un archivo que no están en otro?

¿Hay alguna herramienta que pueda obtener líneas que contiene el archivo A, pero no el archivo B? Podría hacer un pequeño script simple con, por ejemplo, Perl, pero si ya existe algo así, ahorraré tiempo a partir de ahora.

Respuesta aceptada:

Sí. El grep estándar La herramienta para buscar cadenas de texto en archivos se puede utilizar para restar todas las líneas de un archivo de otro.

grep -F -x -v -f fileB fileA

Esto funciona usando cada línea en archivoB como un patrón (-f fileB ) y tratándolo como una cadena simple para que coincida (no como una expresión regular regular) (-F ). Obligas a que la coincidencia ocurra en toda la línea (-x ) e imprima solo las líneas que no coincidan (-v ). Por lo tanto, está imprimiendo las líneas del archivo A que no contienen los mismos datos que ninguna línea del archivo B.

La desventaja de esta solución es que no tiene en cuenta el orden de las líneas y si su entrada tiene líneas duplicadas en diferentes lugares, es posible que no obtenga lo que espera. La solución a eso es usar una herramienta de comparación real como diff . Puede hacer esto creando un archivo diff con el valor de contexto al 100% de las líneas en el archivo, luego analizándolo solo para las líneas que se eliminarían si se convirtiera el archivo A al archivo B. (Tenga en cuenta este comando también elimina el formato de diferencia después de obtener las líneas correctas).

diff -U $(wc -l < fileA) fileA fileB | sed -n 's/^-//p' > fileC

Linux
  1. ¿La diferencia entre un comando incorporado y uno que no lo es?

  2. ¿Cómo obtener la suma Md5 del contenido de un directorio como una sola suma?

  3. ¿Cómo eliminar las líneas que aparecen en el archivo B de otro archivo A?

  4. Cómo obtener el tamaño de tar.gz en un archivo (MB) en python

  5. Encontrar el contenido de un archivo en otro archivo

5 formas de contar el número de líneas en un archivo

¿Cómo copiar un archivo de otro directorio al actual?

insertar el contenido de un archivo a otro (en una línea específica del archivo que se envía) -BASH/LINUX

Cómo obtener direcciones MAC de dispositivos que no están en la red

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

¿Cómo obtener líneas que contienen cadenas en un archivo?