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.