Como comparar vários arquivos e exibir as linhas comuns?

0

Eu tenho quatro arquivos assim:

Conteúdo do arquivo 1 (guia separada, 3 colunas):

applepen apple pen
strawberry straw berry

Conteúdo do arquivo 2:

applepen
strawjelly

Conteúdo do arquivo 3 (este arquivo é classificado):

apple
fan
straw

Conteúdo do arquivo 4 (este arquivo é classificado):

pen
zenith

Eu preciso comparar o campo 1 do arquivo 1 com o arquivo 2, o campo 2 do arquivo 1 com o arquivo 3 e o campo 3 do arquivo 1 com o arquivo 4. Se todas as três correspondências forem encontradas, quero imprimir o campo 1,2 3 do arquivo 1. Eu quero fazer isso para cada linha no arquivo 1.

A saída aqui deve ser:

applepen apple pen

Existe alguma maneira de fazer isso usando grep ou comm ou algo semelhante?

    
por user110327 07.11.2016 / 12:21

2 respostas

0
while read -r f11 f12 f13
do
  grep -qxFe "$f11" file2 && 
  grep -qxFe "$f12" file3 && 
  grep -qxFe "$f13" file4 && 
  printf "%s\n" "$f11 $f12 $f13"
done < file1
    
por 08.11.2016 / 04:40
1

Esta é uma tarefa para join .

$ cat file1 
applepen    apple   pen
strawberry  straw   berry
$ cat file2
applepen
strawjelly
$ cat file3
apple
fan
straw
$ cat file4
pen
zenith
$ join file[12] | join -1 2 -o 1.1,1.2,1.3 - file3 | join -1 3 -o 1.1,1.2,1.3 - file4
applepen apple pen
$ 

Se você realmente se importa com as guias em vez de espaços, pode traduzi-las novamente com | tr ' ' '\t' .

    
por 08.11.2016 / 04:40