comparando o valor da primeira e da terceira colunas em dois arquivos [closed]

0

Eu uso o Ubuntu 18 e tenho pouca experiência com comandos do Linux. Eu tenho dois arquivos:

arquivo 1:

a,txt1,v1
b,txt2,v2
c,txt3,v1
d,txt4,v2

arquivo2:

a,txt5,v2
b,txt6,v1
c,txt7,v1
d,txt8,v2

Desejo imprimir os valores da 1ª e 3ª colunas onde o valor da 1ª coluna é idêntico e o valor da 3ª coluna foi alterado de v1 para v2 . Então minha saída esperada deve ser:

a

A segunda consulta é para os valores da terceira coluna que foram alterados de v2 para v1 . Então, meu resultado esperado:

b
    
por user9371654 13.07.2018 / 05:57

1 resposta

2

$ join -t, file1 file2 | awk -F, '$3 == "v1" && $5 == "v2" { print $1 }'
a

$ join -t, file1 file2 | awk -F, '$3 == "v2" && $5 == "v1" { print $1 }'
b

Isto está assumindo que ambos os arquivos são classificados. Se não estiverem, use

join -t, <( sort file1 ) <( sort file2 ) | awk ...as above...

O comando join produzirá

a,txt1,v1,txt5,v2
b,txt2,v2,txt6,v1
c,txt3,v1,txt7,v1
d,txt4,v2,txt8,v2

Este é o resultado de uma junção relacional entre os dois arquivos usando a primeira coluna como a chave de junção. Isso lista as linhas que possuem a mesma chave de junção em ambos os arquivos e os outros campos de cada arquivo.

O código awk analisa isso e imprime a primeira coluna somente se as colunas 3 e 5 tiverem os valores que estamos procurando.

    
por 13.07.2018 / 09:58