Salida de diferentes líneas al comparar dos files

Tengo dos files de text con el mismo número de cadenas finalizadas con nueva línea. Las líneas en los dos files se corresponden entre sí. Las líneas en cada file individualmente pueden repetirse.

Me gustaría identificar rápidamente cuáles son las dos líneas que difieren y salen del primer file o del segundo.

Presentar un:

this is a string this is another string empty string 

Archivo B:

 this is A string this is another string Empty string 

Desde la perspectiva del file A, me gustaría dar salida a la primera y a la tercera línea ya que son diferentes a las del file B. De manera similar, para el file B, generaría la primera y la tercera línea de estos files.

Mi enfoque estándar para comparar files era orderar los dos files y luego utilizar el binary de comm pero la sorting destruiría la correspondencia entre los dos files. También traté de hacer esto con diff pero parece estar diseñado para una tarea diferente.

También estaría bien dar salida a las dos líneas diferentes de ambos files con una separación de tabs.

Esto hace la comparación desde la perspectiva de fileA :

 $ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileB fileA this is a string empty string 

Este enfoque lee todo el fileB en la memory. Por lo tanto, si sus files son enormes (demasiado grandes para la memory), debe elegir otro enfoque.

Del mismo modo, para get el resultado desde la perspectiva del fileB :

 $ awk 'FNR==NR{a[NR]=$0;next;} $0!=a[FNR]' fileA fileB this is A string Empty string 

Más enfoque de memory eficiente

Este enfoque solo se lee en dos líneas a la vez y, por lo tanto, es más eficiente con la memory. Desde la perspectiva de FileA :

 $ awk '{a=$0;getline <"fileA";} $0!=a' fileB this is a string empty string 

Desde la perspectiva del fileB :

 $ awk '{a=$0;getline <"fileB";} $0!=a' fileA this is A string Empty string