shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Problema com arquivo muito grande


From: Luiz Roberto Ferreira
Subject: Re: [shell-script] Problema com arquivo muito grande
Date: Sat, 26 Apr 2014 23:27:06 -0300

Tente dividir o arquivo em N arquivos via split

split -l (ele) 10000 <nome_do_arquivo> saida_
Onde:
será gerado 10000 linha para cada arquivo na saída acima (ex.: saida_aa / saida_ab, etc)

Boa sorte,
Luiz 


2014-04-26 12:02 GMT-03:00 Thiago Tato <address@hidden>:
 

Galera bom dia,

Estou fazendo um script para limpar uma base de números. Porém o arquivo que consta os números em blacklist é muito grande e tem quase 3 milhões de linhas. Fiz um script que usa o SED para dividir esse arquivo em partes, armazenar em uma variável e após usa o AWK para procurar ocorrências e limpar o segundo arquivo.

Estou passando pelo seguinte problema, quando divido o arquivo em mil linhas tenho o seguinte erro:

awk: line 1: runaway regular _expression_ / 551195116 ...

Com cem mil linhas:

./limpa_base.sh: line 27: /usr/bin/awk: Argument list too long

Agradeco desde já pela ajuda.


Segue o script:

#!/bin/bash

work=$(wc -l /bkp/limpabase/blacklist)
last=$(echo $work | cut -d' ' -f 1)
dir=/bkp/limpabase
input=$dir/blacklist
# Incluir numeros a base

find /home/mnt/limpabase/baselimpa.csv -mtime +1 -exec rm -Rf '{}' \; 2> /dev/null;

        if [ -s $dir/inclusao ]
                then
                        mv $dir/inclusao $dir/inclusao.tmp;
                                cat $dir/inclusao.tmp >> $dir/blacklist;
                                        rm -f $dir/inclusao.tmp;
        fi

                if [ -s $dir/broadcast ]; then
                        i=1
                        f=100000
                        mv $dir/broadcast $dir/broadcast.tmp;
                                while true
                                do

                                        j=$(sed -n "$i,$f"p $input);
                                                #echo $j
                                                awk "!/ $j /"  $dir/broadcast.tmp >> $dir/base

                                if [ $f -gt $last ]; then
                                                sort $dir/base | uniq >> $dir/baselimpa.csv;
                                                        rm -f $dir/broadcast.tmp;
                                                                > $dir/base;
                                                                        exit ;
                                        fi
                                                                let i=i+100000 ;
                                                                        let f=f+100000 ;
                                done
                fi



reply via email to

[Prev in Thread] Current Thread [Next in Thread]