paulo1205
(usa Ubuntu)
Enviado em 14/08/2018 - 16:59h
vagnerfonseca1 escreveu:
Paulo esse é meu problema cada um desse arquivos possui quase 3 milhões de linhas de registro.
Por isso a sua versão é lenta. Note que o
grep dentro do laço de repetição, no seu programa original, lê o arquivo inteiro a cada iteração, para supostamente pegar uma única linha (e mesmo isso pode falhar: se você der um grep de "a.txt", pode pegar tanto "a.txt" qualquer outro arquivo cujo nome termine com "a.txt"). Essa é a maior vantagem da minha versão, pois ela lê cada linha de cada arquivo uma única vez, e as buscas feitas em memória usam um array associativo baseado em tabela
hash, que teoricamente é uma busca de complexidade ≃ O(1). O custo disso é o consumo de memória, que é proporcional à quantidade de linhas do primeiro arquivo.
Já tentou executar minha versão (depois de corrigir eventuais erros que eu tenha cometido, pois não testei o que vai ali)?
Se o consumo de memória for proibitivo, você poderia tentar uma abordagem parecida, mas com dados associativos gravados em disco, mas numa tabela
hash ou árvore B, em lugar de arquivo linear de texto. Contudo, o acesso a esse tipo de dados a partir do shell possivelmente será sub-ótimo, pois cada consulta pode implicar a criação de um processo separado e a execução de um comando externo. Outras linguagens, como Perl ou Python (ou mesmo C ou C++), podem ajudar com esses dados em disco.