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
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?
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
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
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