diferenciar dos files y get el único resultado en el tercero

Soy muy nuevo en shell scripting y lo estoy aprendiendo ahora.

Tengo dos files.

Archivo 1:

1 StartInstall, CDM_2.5B263, OK 2 EndInstall, CDM_2.5B263, SUCCESS 3 StartPatch, CDM_2.5.0.2B1, OK 4 StartPatch, CDM_2.5.0.3B1, OK 5 EndPatch, CDM_2.5.0.3B1, SUCCESS 

Archivo 2:

 1 StartInstall, CDM_2.5B263, OK 2 EndInstall, CDM_2.5B263, SUCCESS 4 StartPatch, CDM_2.5.0.3B1, OK 5 EndPatch, CDM_2.5.0.3B1, SUCCESS 

Debería encontrar la diferencia en el file 2 en comparación con el file 1. Si faltara alguna línea, el script de shell debería indicar la línea omitida y escribirla en otro file de text (ex result.txt ). La secuencia de commands Shell también debería indicarme que la línea omitida se encuentra entre las dos líneas.

Por ejemplo, la salida debería ser como en Error.txt Falta la línea:

 3 StartPatch, CDM_2.5.0.2B1, OK 

Entre 2 y 4

Usando comm , ya que los files están orderados:

 comm -3 file1 file2 > result.txt 

El resultado contiene las líneas que están presentes en el file1 pero no en el file2 , y también las líneas que están presentes en el file2 pero no en el file1 con el prefijo de una pestaña.

Si los files no están orderados, ordénelos primero. Asumiendo que estás usando bash, ksh o zsh y no sh simple:

 comm -3 <(sort file1) <(sort file2) > result.txt 

Esta es probablemente la forma más fácil. Aviso < es una omisión y | indica que un personaje en la línea es diferente. (La línea 5 en el file1.txt tenía algunos caracteres en blanco faltantes en su copyr y pegar).

$ diff -y file1.txt file2.txt > diff.txt

 1 StartInstall, CDM_2.5B263, OK 1 StartInstall, CDM_2.5B263, OK 2 EndInstall, CDM_2.5B263, SUCCESS 2 EndInstall, CDM_2.5B263, SUCCESS 3 StartPatch, CDM_2.5.0.2B1, OK < 4 StartPatch, CDM_2.5.0.3B1, OK 4 StartPatch, CDM_2.5.0.3B1, OK 5 EndPatch, CDM_2.5.0.3B1, SUCCESS | 5 EndPatch, CDM_2.5.0.3B1, SUCCESS 

Esto no genera un file nuevo, pero obtienes una session de vimdiff que compara visualmente los dos files y resalta las líneas y los caracteres que faltan de manera muy intuitiva.

$ vimdiff file1.txt file2.txt