Exclui valores semelhantes do awk

2

Por favor, considere os arquivos abaixo:

Arquivo 1:

boo,194,2322
foo,999,7559

Arquivo 2:

boo,2322
boo,4526
foo,4222
foo,4223

Eu preciso vincular Field1 no Arquivo 1 com Field1 no Arquivo 2 e obter os Field2 relacionados do Arquivo 2 , excluindo o resultado, se for igual a Field3 no Arquivo 1 .

O resultado deve ser:

boo,4526
foo,4222,4223

Eu tentei o script abaixo, mas isso não exclui os valores semelhantes.

awk -F, 'NF==3{arr[$1]=$3}{if(arr[$1]==$1){print $2}}'
    
por Eng7 15.11.2015 / 10:02

1 resposta

2

Você precisa verificar se $1 está em arr e, em caso afirmativo, se o valor é diferente de $2 e, em seguida, imprimir:

awk -F, 'FNR == NR { arr[$1] = $3; next }
         { if ($1 in arr && arr[$1] != $2) print $2 }'

Usar FNR == NR e next é a maneira convencional de processar linhas no primeiro arquivo de maneira diferente das linhas de outros arquivos. Sim, você pode achatá-lo em uma linha, mas "one-liner" é um termo pejorativo, a menos que você esteja escrevendo APL (ou talvez Perl).

    
por 15.11.2015 / 17:38