para comparar dois campos em dois arquivos diferentes

2

Em file1 , tenho

1023M  BLD
123G   DEV
945K   Deployment
4899   INT

Em file2 , tenho

1.2G   BLD
123G   DEV
345M   Deployment
499M   INT

Eu queria comparar o primeiro campo de file1 com o primeiro campo de file2 . Eu só queria imprimir apenas os campos incompatíveis em file3

    
por kamalesh 20.08.2014 / 07:45

3 respostas

8

Com os arquivos de amostra, o comando abaixo fornecerá o resultado necessário

$ paste file1 file2 | awk '$1!=$3'

A saída da amostra será como abaixo

1023M  BLD  1.2G   BLD
945K   Deployment   345M   Deployment
4899   INT  499M   INT

use o redirecionamento para o arquivo para gravar isso no arquivo3.

    
por 20.08.2014 / 08:43
0

Se você gostaria de pensar no problema do SQL da mesma forma, então você deve tentar uma ferramenta chamada ' q ':

$ q 'SELECT f1.*, f2.* FROM file1 f1 JOIN file2 f2 ON f1.c2 = f2.c2 WHERE f1.c1 != f2.c1';

É mais claro e fácil de entender se você estiver familiarizado com a consulta SQL.

    
por 09.12.2015 / 15:14
-1

Eu usaria diff ou sdiff, porque eu sinto que é uma solução menos hackeada, e faço alguma manipulação com a saída com o awk ou uma ferramenta similar, se necessário.

➜  ~  sdiff 1.txt 2.txt
1023M  BLD                 |  1.2G   BLD
123G   DEV                    123G   DEV
945K   Deployment          |  345M   Deployment
4899   INT                 |  499M   INT

Então você pode ver os valores que diferem após o símbolo do pipe.

Cumprimente apenas aqueles, como na resposta acima:

➜  ~  sdiff 1.txt 2.txt | grep '|'
1023M  BLD                 |  1.2G   BLD
945K   Deployment          |  345M   Deployment
4899   INT                 |  499M   INT

Pessoalmente, penso que esta é uma solução mais suave. Para redirecionar apenas faça:

➜  ~  sdiff 1.txt 2.txt | grep '|' > 3.txt

Você também pode usar o diff e o grep para obter apenas os campos que diferem da primeira linha:

➜  ~  diff 1.txt 2.txt | grep "^>"
> 1.2G   BLD
> 345M   Deployment
> 499M   INT
    
por 20.08.2014 / 09:11