A maneira mais rápida de encontrar linhas de um arquivo de outro arquivo maior no Bash

Eu tenho dois arquivosfile1.txt efile2.txt. file1.txt tem cerca de 14 mil linhas efile2.txt tem cerca de 2 bilhões.file1.txt tem um único campof1 por linha enquantofile2.txt tem 3 campos,f1 atravésf3, delimitado por|.

Eu quero encontrar todas as linhas defile2.txt Ondef1 dofile1.txt fósforosf2 dofile2.txt (ou em qualquer lugar da linha, se não quisermos gastar mais tempo dividindo os valores defile2.txt)

file1.txt (cerca de 14 mil linhas,não classificado):

foo1
foo2
...
bar1
bar2
...

file2.txt (cerca de 2 bilhões de linhas,não classificado):

date1|foo1|number1
date2|foo2|number2
...
date1|bar1|number1
date2|bar2|number2
...

Resultado esperado:

date1|foo1|number1
date2|foo2|number2
...
date1|bar1|number1
date2|bar2|number2
...

Aqui está o que eu tentei e parece levar várias horas para executar:

fgrep -F -f file1.txt file2.txt > file.matched

Gostaria de saber se existe uma maneira melhor e mais rápida de fazer essa operação com os comandos comuns do Unix ou com um pequeno script.

questionAnswers(16)

yourAnswerToTheQuestion