Cómo eliminar líneas comunes de dos archivos en Linux
¿Cómo puedo eliminar líneas que contienen texto coincidente de dos archivos en Linux? Analicemos cómo realizar esta tarea usando el comando de comunicación y ordenación de Linux.
Supongamos que tiene dos archivos, digamos archivo1 y archivo2, con el siguiente contenido:
$ cat file1 test@domain.com test2@domain.com dom@domain.com test3@domain.com
$ cat file2 test2@domain.com test3@domain.com
El propósito es obtener un archivo con contenido que sea exclusivo de file1 (las líneas coincidentes de file2 deben eliminarse de file1).
Entonces, el archivo resultante debería ser el siguiente.
$ cat file3 test@domain.com dom@domain.com
Esto se puede hacer con el comando de Linux «comm». La sintaxis básica de este comando es la siguiente:
comm [-1] [-2] [-3 ] file1 file2
-1 Suppress the output column of lines unique to file1. -2 Suppress the output column of lines unique to file2. -3 Suppress the output column of lines duplicated in file1 and file2. file1 Name of the first file to compare. file2 Name of the second file to compare.
Antes de aplicar “comm”, necesitamos ordenar los archivos de entrada. Entonces, para obtener las líneas exclusivas del archivo1, podemos usar una combinación de comandos «comm» y «sort» de la siguiente manera.
$ comm -23 <(sort file1) <(sort file2) > file3
El comando anterior creará el archivo file3 con el contenido exclusivo de file1 y file2. Puedes leer páginas del comando man comm para más detalles.