Compare dois arquivos e imprima linhas sem correspondência [duplicado]

5

Eu tenho dois arquivos com os dados abaixo; Eu preciso da diferença entre dois arquivos.

Eu tentei com diff , mas também mostra linhas que são comuns nos dois arquivos: (22372 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/new.txt) .

Primeiro arquivo: (múltiplos dados existem da mesma maneira no arquivo 1)

22677 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

22372 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/new.txt

Segundo arquivo: (vários dados existem da mesma maneira no arquivo 2).

22372 Dec 4 15:36 /opt/apache-tomcat-6.0.36/webapps/new/new.txt

22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt

Eu preciso da saída abaixo:

22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt
    
por Sak 31.12.2014 / 07:09

2 respostas

8

Esta parece ser uma oportunidade perfeita para usar a comunicação.

$ comm -1 -3 <(sort file1) <(sort file2)
12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt
22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

-1 e -3 remove todas as linhas exclusivas do arquivo 1 e todas as linhas comuns a ambos.

Por causa do tipo, isso mudará a ordem da saída, mas isso não parece ser uma consideração baseada na pergunta.

Se a entrada já estiver classificada, você pode pular os tipos que geram

$ comm -1 -3 file1 file2
    
por 31.12.2014 / 10:01
3

Use diff -u file1 file2 | sed -nr 's/^+([^+].*)//p'

Saída:

22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt
12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt

Se você precisar da linha em branco entre eles, use diff -u file1 file2 | sed -nr 's/^+([^+].*)/\n/p'

Saída:

22677 Dec 3 15:36 /opt/apache-tomcat-6.0.36/webapps/new/abc.txt

12344 Dec 10 15:36 /opt/apache-tomcat-6.0.36/webapps/abc/.../test.txt

    
por 31.12.2014 / 07:20