Utilice el comando comm(1)
para comparar los dos archivos. Ambos deben estar ordenados, lo que puedes hacer de antemano si son grandes, o puedes hacerlo en línea con bash sustitución de proceso.
comm
puede tomar una combinación de las banderas -1
, -2
y -3
que indican qué archivo para suprimir líneas de (únicos para presentar 1, únicos para presentar 2 o comunes a ambos).
Para obtener las líneas sólo en el archivo antiguo:
comm -23 <(sort /tmp/oldList) <(sort /tmp/newList)
Para obtener las líneas sólo en el nuevo archivo:
comm -13 <(sort /tmp/oldList) <(sort /tmp/newList)
se puede alimentar a que en un bucle while read
para procesar cada línea :
while read old ; do
...do stuff with $old
done < <(comm -23 <(sort /tmp/oldList) <(sort /tmp/newList))
y análogamente para las nuevas líneas.
La misma pregunta fue hecha 4 días antes http://stackoverflow.com/questions/11099894/comparing-2-unsorted-lists-in-linux-listing-the-unique-in-the-second-file/11101143 # 11101143 –