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