awk causando vazamento de memória?

3

Estou usando o awk para processar um arquivo de dados enorme (cerca de 100 milhões de linhas).

Esta é a minha expressão -

tac <myfile> | awk -F',' 'OFS=\",\" {if(/^#/){print;}else{\=tolower(\);if(!seen[\]++)print;}}'|")

No entanto, estou vendo vazamento de memória com o awk. Alguém pode apontar o porco da memória aqui?

Obrigado!

    
por pragmatic 02.01.2015 / 13:41

1 resposta

2

Eu acredito que com o número de linhas que você apresenta, provavelmente você está trocando ...

O script perl abaixo está usando uma árvore B em disco (algo muito comum em bancos de dados) para a matriz - estamos usando quase nenhuma memória RAM.

$ cat remdup
#!/usr/bin/perl

use DB_File;
tie %seen, 'DB_File', "mydbfile.db", O_RDWR|O_CREAT|O_TRUNC ,0666, $DB_BTREE;

while(<>){
  if(/^#/)        { print; }
  elsif(/(.*?),/) { $a=lc($1);
                    print if( ! $seen{$a}++)}
}

de qualquer maneira, levará muito tempo para processar (16s para 1 milhão de linhas no meu laptop de 5 anos)

Uso: tac file | perl remdup > output

Editar: se você executar qualquer solução, informe-nos os horários.

    
por 02.01.2015 / 21:17