Se os arquivos estiverem classificados, você poderá conseguir juntar-se (1) ou combinar (1) para trabalhar de forma razoavelmente eficiente. head -1
na saída irá parar na primeira linha e deve matar o resto do comando com um SIGPIPE quando ele sair.
Adicionalmente, você pode ser capaz de reduzir o tamanho do problema usando uniq (1) no arquivo maior A. Isto irá resumi-lo a um conjunto de linhas distintas, que podem então ser comparadas com sua lista de arquivos B .
Outra possibilidade seria adaptar seu script python para fazer algo como o seguinte.
For each B file:
Read in each line
Add the file name to a list of files keyed on a hash of the line
Loop through the A file:
Look up each line in the dictionary
Output the file name when a match is found.
Isso consumirá uma grande quantidade de memória se o número de linhas distintas em seus arquivos 'B' for grande, então pode ou não ser prático. Se você não se importar com o pós-processamento para eliminar os falsos positivos, poderá cortar o consumo de memória nesse estágio apenas armazenando o hash.
Uma terceira forma seria carregar todo o lote em um banco de dados e fazer a junção, mas isso implica na sobrecarga de importar os dados, o que pode ser muito grande. Com os índices apropriados, a consulta real correspondente seria bastante rápida e poderia verificar todos os arquivos B de uma vez, ou seja,
Create table A (
TextLine varchar (100) -- or whatever length you need
)
Create table B (
TextLine varchar (100)
,Filename varchar (20)
)
Alter table B
add constraint PK_B
primary key (TextLine, FileName)
select distinct B.FileName
from A
join B
on a.TextLine = B.TextLine