2 archivos de texto grandes, busque las líneas que no están duplicadas en el terminal de Linux


1

Estoy buscando para encontrar líneas que no están duplicadas, ejemplo;

Archivo de texto 1:

cats 3
dogs 8
mice 4
pigs 10
...

Archivo de texto 2:

dogs 8
mice 4
cats 78
pigs 29
bird 6
...

Los gatos y los cerdos simplemente se cambiaron pero ahora son diferentes. Ambos archivos contienen 'perros 8' y 'ratones 4', por lo que la salida de diferentes líneas sería:

cats 78
pigs 29
bird 6

Esperaba que estuviera buscando una forma de hacerlo en una terminal de Linux como; comando input1.txt input2.txt diffrences.txt


Su ejemplo muestra solo las líneas que están en el archivo 2 pero no el archivo 1, pero eso no es lo que dice su pregunta. Por favor haga que la pregunta y el ejemplo sean consistentes.
G-Man

Respuestas:


3

Si los archivos están bien ordenados, podrías hacer algo tan simple como esto.

diff -u file1 file2

Si los archivos no están ordenados y desea buscar líneas únicas, puede hacer algo como esto en su lugar.

diff -u <(sort file1) <(sort file2)

Teniendo en cuenta los archivos anteriores, se verá esto.

$ diff -u <(sort file1) <(sort file2)
--- /dev/fd/63  2014-09-19 15:40:20.223409721 -0700
+++ /dev/fd/62  2014-09-19 15:40:20.219409761 -0700
@@ -1,4 +1,5 @@
-cats 3
+bird 6
+cats 78
 dogs 8
 mice 4
-pigs 10
+pigs 29

¿hay una manera de obtener las salidas '+' solamente y no todas las líneas '-', etc.,

Claro, simplemente apílelo a través de grep.

$ diff -u <(sort file1) <(sort file2) | grep '^+'
+++ /dev/fd/62  2014-09-19 15:50:18.293474221 -0700
+bird 6
+cats 78
+pigs 29

Las líneas de texto serían aleatorias, pero algunas se duplicarían allí.
mark

¿hay una manera de obtener las salidas '+' solamente y no todas las líneas '-', etc., gracias por ayudar
mark

¿Puede esto manejar archivos grandes de tamaño de gb?
mark

can this handle large files gb's sizes? - Puede, pero potencialmente será lento. La parte más lenta será la clasificación de archivos grandes. He usado esto para comparar archivos de registro bastante grandes. Actualicé la pregunta para incluir el ejemplo de filtrado.
Zoredache

¿Hay una manera de guardarlo directamente sin grep? con un solo comando?
mark
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.