Daemonio
(usa Slackware)
Enviado em 17/09/2010 - 00:47h
Difícil.. enquanto a lógica for: Para cada linha do arquivo X, procure-a no arquivo Y, o script fará um número absurdo de comparações.
Ou seja: Só nessa brincadeira você irá ter feito 4*124 milhões de comparações, que é um pouco maior que "coisa pra caramba". :|
Acho que um script que faça essa tarefa em um tempo mais curto que o do ricklgoncalves seja quase impossível (pelo menos em se tratando de shell script). Afinal, até agora só o script dele funcionou, como você disse.
Um jeito de melhorar esse tempo de pesquisa, seria você dividir esse arquivo Y em vários outros seguindo algum padrão (ex: cada arquivo contém um determinado país, ou uma parte específica do ip, etc).
Desse modo as comparações seriam estrondozamente menores, pois cada linha em X saberia onde procurar em Y. Lógico que você gastaria tempo para separar o arquivo Y em outros menores, mas pelo menos você ganharia tempo em cada pesquisa que você fizesse.
Tipo, vendo a mensagem de erro que você postou:
xrealloc: subst.c:4952: cannot allocate 1073741824 bytes (6442692608 bytes allocated)
parece que o bash impõe algum limite no tamanho do buffer a ser alocado. Seria interessante, você pegar o código fonte do bash ou desse subst.c (ou do grep, nem sei te falar o certo :( ) e aumentar o tamanho do buffer diretamente no source. Nunca fiz isso e nem sei se funciona, mas fica a dica.
Acho que é isso.
t+