segunda-feira, 31 de dezembro de 2012

Análise dos números da Mega Sena

Para encerrar o ano, um script que trabalha com os números dos concursos anteriores da Mega Sena.

O script baixa um arquivo com todos os resultados da Mega Sena, descompacta e apaga arquivos sem importância.

Considero ser uma melhoria em relação ao script da Análise dos números da Quina por simplificar a etapa de extrair os números sorteados e evitar mensagens de erros quando se tenta apagar arquivos que não existem.

#!/bin/bash
# Created in dez/26/2012 by murilofujita@gmail.com

# Baixa e descompacta
wget http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_mgsasc.zip
unzip D_mgsasc.zip

# Apaga arquivos desnecessários
if [ -f D_mgsasc.zip ]
  then
    rm D_mgsasc.zip
fi

if [ -f T2.GIF ]
  then
    rm T2.GIF
fi

if [ -f /tmp/sena1.txt ]
  then
    rm /tmp/sena*.txt
fi

inicio=4 # Primeira linha da sequência do primeiro sorteio 
fim=9 # Última linha da sequência do primeiro sorteio
contador=1 # Primeiro sorteio

# Necessário eliminar o Feed Line e Carriage Return editado pelo windows
tr -d '\r' < d_megasc.htm > $$
mv $$ d_megasc.htm 

# Busca a quantidade de sorteios realizados
jogos=`tail -n 23 d_megasc.htm | head -n 1 | sed 's/<td>//' | sed 's/<\/td>//'`
echo $jogos sorteios realizados

# Loop que elimina as marcações HTML
while [ $contador -le $jogos ]
  do
    for i in `seq $inicio 1 $fim`
      do
        head -n $i d_megasc.htm | tail -n 1 | sed 's/<td>//g' | sed 's/<\/td>//g' 
      done 
    let inicio=$inicio+21 # A cada 21 linhas uma nova sequência do sorteio
    let fim=$fim+21
    let contador=$contador+1    
  done > /tmp/sena1.txt

echo Exibindo a frequencia dos numeros sorteado da Mega Sena
  for i in `seq 9`
    do
      printf "0$i `grep 0$i /tmp/sena1.txt | wc -l`  "
    done
  printf "10 `grep 10 /tmp/sena1.txt | wc -l` "
  printf "\n"

  inicio=11
  fim=20
  while [ $inicio -le 60 ] # Conta a frequencia dos 60 números da Mega Sena
  do
   for i in `seq $inicio 1 $fim`;
     do
       printf "$i `grep $i /tmp/sena1.txt | wc -l`  "
     done
     printf "\n"
     let inicio=$inicio+10
     let fim=$fim+10
  done

# Para efeito de tabulação, separa-se os números de 1 e 2 algarismos
for i in `seq 9`; do printf "0$i `grep 0$i /tmp/sena1.txt | wc -l`\n" ; done >> /tmp/sena2.txt
for i in `seq 10 1 60`; do printf "$i `grep $i /tmp/sena1.txt | wc -l`\n" ; done >> /tmp/sena2.txt

# Ordena de acordo com a frequencia sorteada
awk '{printf "%3s %3s\n",$2, $1}' /tmp/sena2.txt | sort -n | tail -n 6 > /tmp/sena3.txt

printf "\n"
echo Os numeros mais sorteados sao:
echo Dezena Frequencia

# Exibe as 6 dezenas mais frequentes (do maior para o menor)
for i in `seq 6`
  do
     tail -n $i /tmp/sena3.txt | head -n 1 | awk '{printf "%4s %8s\n",$2, $1}'
  done
  
if [ -f d_megasc.htm ]
  then
    rm d_megasc.htm
fi

O resultado do script, executado até o concurso 1454 é exibido a seguir:

1454 sorteios
Exibindo a frequencia dos numeros sorteado da Mega Sena
01 135  02 143  03 144  04 159  05 177  06 137  07 146  08 150  09 126  10 151 
11 136  12 153  13 155  14 134  15 133  16 154  17 157  18 138  19 141  20 140  
21 127  22 123  23 150  24 158  25 137  26 117  27 145  28 152  29 158  30 149  
31 144  32 152  33 163  34 146  35 136  36 148  37 147  38 141  39 134  40 141  
41 155  42 156  43 160  44 146  45 130  46 130  47 147  48 132  49 156  50 155  
51 161  52 156  53 160  54 162  55 132  56 143  57 140  58 140  59 146  60 140  

Os numeros mais sorteados sao:
Dezena Frequencia
  05      177
  33      163
  54      162
  51      161
  53      160
  43      160

real 1m1.930s