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
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?
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'
.
Tags grep text-processing comm