Comparando dois arquivos em unix e awk

5

Eu tenho que comparar dois arquivos, file1 e file2. Cada arquivo tem 56 colunas separadas por | . Primeira coluna é o número do empregado no arquivo, vou verificar se o mesmo número de funcionário está presente no segundo arquivo ou não. Se não, vamos escrever a linha inteira no arquivo de saída. Se o mesmo número de funcionário estiver presente no arquivo2, preciso comparar o valor de cada coluna. Se os dados não corresponderem, temos que escrevê-lo no arquivo de saída. Se os valores de cada coluna corresponderem, precisamos omitir esse registro.

Exemplo de arquivo
Arquivo 1

2620|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality and Wipro Way|||
2623|256034|131021|Mission Quality and Wipro Way|||

Arquivo 2

2620|256034|234567|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
2623|256034|131021|Mission Quality and Wipro Way|||

Exemplo de saída:

2620|256034|131021|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
    
por Biswamohan Padhy 26.12.2014 / 13:52

2 respostas

5

Se arquivos são classificados muito fácil, faça a tarefa por diff

comm -13 File1 File2
    
por 26.12.2014 / 14:39
0

Você pode usar awk , por exemplo,

awk -F'|' 'NR==FNR {a[$1]=$0;next;}; !($1 in a) || ($0 != a[$1]);' File1 File2

Usando seu exemplo File1 e File2

$ awk -F'|' 'NR==FNR {a[$1]=$0;next;}; !($1 in a) || ($0 != a[$1]);' File1 File2
2620|256034|234567|Mission Quality and Wipro Way|||
2621|256034|131021|Mission Quality and Wipro Way|||
2622|256034|131021|Mission Quality|||
    
por 26.12.2014 / 15:24