2 arquivos de texto grandes, encontre as linhas que não são terminais Linux duplicados

1

Estou procurando encontrar linhas que não sejam duplicadas, por exemplo;

Arquivo de texto 1:

cats 3
dogs 8
mice 4
pigs 10
...

Arquivo de texto 2:

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

Gatos e porcos simplesmente mudaram, mas agora são diferentes. Ambos os arquivos contêm 'dogs 8' e 'mice 4', então a saída de linhas diferentes seria:

cats 78
pigs 29
bird 6

Espero que esteja procurando uma maneira de fazer isso no terminal do Linux; comando input1.txt input2.txt diffrences.txt

    
por mark 20.09.2014 / 00:26

1 resposta

3

Se os arquivos estiverem bem organizados, você pode fazer algo tão simples quanto isso.

diff -u file1 file2

Se os arquivos não estiverem classificados e você quiser encontrar linhas exclusivas, poderá fazer algo assim.

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

Dados os arquivos acima, você verá isso.

$ 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

is there a way to get the '+' outputs only and not all the '-' lines etc,

Claro, apenas empilhe através do 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
    
por 20.09.2014 / 00:37