Com o ganho de experiência, aprende-se a resolver os mesmos problemas de forma otimizada. Há um tempo foi apresentado o Análise dos números da Mega Sena e ao executar o mesmo script, resulta em erros porque a formatação dos dados foi alterada. Com algumas novas "sacadas", há uma nova versão disponível acompanhada dos comentários.
Com relação às melhorias, lista-se:
- Saída sem exibir as respostas do unzip;
- Ao invés de localizar um bloco que contém os números sorteados, localiza-se a data do sorteio e armazena-se as 6 linhas abaixo (as dezenas sorteadas);
- Como consequência do item anterior, menos tags HTML para manipular.
Abaixo o shell script comentado mostrando a frequência de cada dezena sorteada e os 6 números mais frequentes.
#!/bin/bash # Created in dez/26/2012 by murilofujita@gmail.com # Modified in dez/14/2014 # Optimized in dez/16/2014 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 wget http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_mgsasc.zip unzip D_mgsasc.zip >& /dev/null tr -d '\r' < d_megasc.htm > $$ mv $$ d_megasc.htm ano_atual=`date +%Y` # Quantidade de jogos realizados for ano in `seq $ano_atual 1 $ano_atual` do jogo=`sed -n "/$ano/{x;p;};h" d_megasc.htm | sed 's/<[^>]*>//g'` done # sorteios=`echo "$jogo"` printf "Dados dos `echo "$jogo" | tail -n 1` sorteios" # Obtendo os números sorteados # "/ano" é a palavra para ser localizada. Se for apenas "ano" o numero 2000 pode aparecer # em outro campo. Por exemplo: 2000 é o número de ganhadores da quadra em 28/04/2004 for ano in `seq 1996 1 $ano_atual` do awk "/\/$ano/ {for(i=1; i<=6; i++) {getline; print}}" d_megasc.htm done > /tmp/sena1.txt # Necessário remover as tags para que a massa de dados contenha apenas os números sorteados sed 's/<[^>]*>//g' /tmp/sena1.txt > $$ mv $$ /tmp/sena1.txt echo echo Exibindo a frequência dos números sorteados 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" for i in `seq 11 1 60` do printf "$i `grep $i /tmp/sena1.txt | wc -l` " if [ $((i % 10)) -eq 0 ] then printf "\n" fi done printf "\n" 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 awk '{printf "%3s %3s\n",$2, $1}' /tmp/sena2.txt | sort -n | tail -n 6 > /tmp/sena3.txt echo Os números mais sorteados são: echo Dezena Frequência for i in `seq 6` do tail -n $i /tmp/sena3.txt | head -n 1 | awk '{printf "%4s %8s\n",$2, $1}' done printf "\n" awk '{printf "%s\n",$2}' /tmp/sena2.txt | paste -s -d"+" if [ -f d_megasc.htm ] then rm d_megasc.htm fi
Até a data de publicação foram realizados 1661 sorteios e o resultado é exibido abaixo:
Dados dos 1661 sorteios Exibindo a frequência dos números sorteados da Mega Sena 01 159 02 170 03 157 04 192 05 196 06 163 07 168 08 170 09 143 10 176 11 154 12 168 13 177 14 151 15 149 16 174 17 181 18 161 19 153 20 159 21 145 22 137 23 178 24 182 25 148 26 137 27 169 28 176 29 175 30 170 31 167 32 172 33 184 34 166 35 157 36 173 37 164 38 166 39 143 40 158 41 175 42 184 43 178 44 173 45 151 46 160 47 170 48 150 49 179 50 173 51 187 52 177 53 186 54 187 55 144 56 164 57 155 58 162 59 163 60 160 Os números mais sorteados são: Dezena Frequência 05 196 04 192 54 187 51 187 53 186 42 184 159+170+157+192+196+163+168+170+143+176+154+168+177+151+149+174+181+161+153+159+145+137+178+182+148+137+169+176+175+170+ 167+172+184+166+157+173+164+166+143+158+175+184+178+173+151+160+170+150+179+173+187+177+186+187+144+164+155+162+163+160
A razão desta última linha é fazer uma checagem. Analise:
1661 sorteios * 6 números sorteados = 9966 números.
Basta copiar a linha do somatório e colar em uma calculadora ou célula de planilia eletrônica para verificar se coincide com a mesma quantidade dos números sorteados.
Conclusão: Por causa da diferença no formato da tabela, invalidou o primeiro script da "mega sena" e forçou uma otimização na forma de lidar com novo arquivo. O tempo de processamento diminuiu e é possível fazer uma verificação se todos os números foram contabilizados.
Ainda tem como fazer este código funcionar? Toda forma q eu tento da erro 404 quando vai baixar o zip
ResponderExcluirNicos, ao acessar a parte de loterias do site da CEF confirmei sua queixa. O site inteiro da Caixa está fora do ar e pode ser checado digitando palavras como "site caixa fora do ar". Até onde sei somente a Caixa reúne os resultados e por isso o único jeito é esperar. Caso saiba onde possa encontrar os resultados em outro lugar, pode-se fazer uma adaptaçãodo script.
ExcluirObrigado pela participação.
Olá, valeu pelo script! ainda funciona. testado em 05/05/2016
ResponderExcluir;)
ResponderExcluir