Compare os campos de dois arquivos

1

Eu tenho dois arquivos como este:

Arquivo 1

apple fruit 10 4
strawberry fruit 22 11
berry fruit 33 33
ball toy 1 12
straw thing 2 33

Arquivo 2

strawberry straw berry
rawberry raw berry

Quero comparar a coluna 1 do arquivo 2 com a coluna 1 do arquivo 1, a coluna 2 do arquivo 2 com a coluna 1 do arquivo 1, a coluna 3 do arquivo 2 com a coluna 1 do arquivo 1. Se a correspondência for encontrada, desejo para exibir todas as três linhas correspondentes do arquivo 1.

Aqui, a saída deve ser:

strawberry fruit 22 11
straw thing 2 33
berry fruit 33 33

Como posso fazer isso usando comandos Unix no terminal?

    
por user110327 10.11.2016 / 08:26

3 respostas

1

Você pode tentar grep -Ff File2 File1

Onde, o -f File2 lê os padrões do File2 e o -F trata os padrões como strings fixas

    
por Arijit Chatterjee 10.11.2016 / 10:12
1

Baseado na proposta de Arijit Chatterjee, eu sugiro

grep -Ff <(tr -s " " "\n" < file2) file1

Onde tr -s " " "\n" transforma o arquivo2 em uma entrada de uma palavra por linha, melhor adaptado para grep -Ff

    
por JJoao 10.11.2016 / 10:22
0

Usando awk , você poderia colocar todas as palavras de File2 em uma matriz associativa e, em seguida, verificar o campo 1 de File2 para associação:

awk 'NR==FNR {for(i=1;i<=NF;i++) a[$i]++; next}  in a' File2 File1
strawberry fruit 22 11
berry fruit 33 33
straw thing 2 33

Uma solução semelhante pode ser implementada usando um hash em perl

    
por steeldriver 10.11.2016 / 14:15