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

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

Problema com arquivo muito grande


From: Thiago Tato
Subject: Problema com arquivo muito grande
Date: Sat, 26 Apr 2014 12:02:24 -0300

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]