Gerar números aleatórios e verificar se já existe em BD

1. Gerar números aleatórios e verificar se já existe em BD

Benedito Ramos
diramos

(usa Debian)

Enviado em 03/07/2022 - 15:30h

Mestres, boa tarde.
Fiz um script em bash para gerar números aleatórios, para aposta na megasena.
Ex. de uso:

#./gerajogos.sh 3 6, onde $1 é a qtd de jogos e $2 a qtde de dezenas.

Ex. saida:

14 17 23 39 57 58
02 16 24 38 49 56
03 15 26 36 37 41

O resultado é gravado no arquivo jogos.tx

Tenho um BD atualizado, tipo .txt com todos os resultados dos sorteios até agora, no seguinte formato:

1 - 11/03/1996 - 04 05 30 33 41 52 - 0,00 - 0
2 - 18/03/1996 - 09 37 39 41 43 49 - 2.307.162,23 - 1
3 - 25/03/1996 - 10 11 29 30 36 47 - 391.192,51 - 2
...
...
2494 - 25/06/2022 - 01 04 10 22 53 54 - 78.763.087,85 - 1
2495 - 28/06/2022 - 08 12 14 30 33 41 - 0,00 - 0

Onde as dezenas sorteadas dos prêmios estão no campo 3 da tabela.

Pois bem. Preciso da ajuda dos mestres para o seguinte:
No script que gera os jogos aleatórios, incluir as seguintes condições:
1 - Quando gerar cada dezena a para aposta, verificar se cada uma já existe na relação que está sendo gerada. Se não existir, armazena e prossegue com o laço, gerando as demais, de modo que não se repita jogos. Se existir, não armazena e tenta de novo.
2 - Comparar se o jogo que está sendo gerado com o BD de resultados. Se não existir, armazena e prossegue com o laço, gerando as demais, de modo que não se repita jogos. Se existir, não armazena e tenta de novo.

RESUMINDO: As apostas não podem ser repetidas, nem coincidirem com resultados já sorteados, contidos no BD.

Já tentei de tudo aqui, mas não cheguei a uma solução.

Segue o script gerajogos.sh para avaliação.

Grato desde já.

#!/bin/bash
rm jogosformatado.txt jogosformatado1.txt jogos.txt
qtdjogos=$1
qtddezenas=$2
metadeqtddezenas=$(echo "$qtddezenas"/2 | bc)
dezezenasasereremexcluidas=$(shuf -i 1-$qtddezenas -n 1)
n=1
while (( $n <= $qtdjogos ))
do
if [ $n -lt 10 ]
then
echo -n "Jogo "0"$n: "
else
echo -n "Jogo $n: "
fi
n=$(( n+1 ))
jogos1a30=$(shuf -i 1-30 -n $metadeqtddezenas | tr -d ',e' | tr -s ' ' | sed 's/ / \n/g' | sort -n | while read a; do printf '%02d ' $a ; done)
jogos31a60=$(shuf -i 31-60 -n $metadeqtddezenas | tr -d ',e' | tr -s ' ' | sed 's/ / \n/g' | sort -n | while read a; do printf '%02d ' $a ; done)
echo $jogos1a30 $jogos31a60
done >> jogosformatado.txt
cat jogosformatado.txt | awk '{$1="";$2=""; print $0}' | sed 's/^ \+//' > jogosformatado1.txt
cp jogosformatado1.txt jogos.txt
chown www-data jogos.txt
chgrp www-data jogos.txt
cat jogos.txt



  


2. Re: Gerar números aleatórios e verificar se já existe em BD

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/07/2022 - 23:04h

diramos escreveu:

Mestres, boa tarde.
Fiz um script em bash para gerar números aleatórios, para aposta na megasena.
Ex. de uso:

#./gerajogos.sh 3 6, onde $1 é a qtd de jogos e $2 a qtde de dezenas.

Ex. saida:

14 17 23 39 57 58
02 16 24 38 49 56
03 15 26 36 37 41

O resultado é gravado no arquivo jogos.tx

Tenho um BD atualizado, tipo .txt com todos os resultados dos sorteios até agora, no seguinte formato:

1 - 11/03/1996 - 04 05 30 33 41 52 - 0,00 - 0
2 - 18/03/1996 - 09 37 39 41 43 49 - 2.307.162,23 - 1
3 - 25/03/1996 - 10 11 29 30 36 47 - 391.192,51 - 2
...
...
2494 - 25/06/2022 - 01 04 10 22 53 54 - 78.763.087,85 - 1
2495 - 28/06/2022 - 08 12 14 30 33 41 - 0,00 - 0

Onde as dezenas sorteadas dos prêmios estão no campo 3 da tabela.

Pois bem. Preciso da ajuda dos mestres para o seguinte:
No script que gera os jogos aleatórios, incluir as seguintes condições:
1 - Quando gerar cada dezena a para aposta, verificar se cada uma já existe na relação que está sendo gerada. Se não existir, armazena e prossegue com o laço, gerando as demais, de modo que não se repita jogos. Se existir, não armazena e tenta de novo.
2 - Comparar se o jogo que está sendo gerado com o BD de resultados. Se não existir, armazena e prossegue com o laço, gerando as demais, de modo que não se repita jogos. Se existir, não armazena e tenta de novo.

RESUMINDO: As apostas não podem ser repetidas, nem coincidirem com resultados já sorteados, contidos no BD.

Já tentei de tudo aqui, mas não cheguei a uma solução.

Segue o script gerajogos.sh para avaliação.

Grato desde já.

#!/bin/bash
rm jogosformatado.txt jogosformatado1.txt jogos.txt
qtdjogos=$1
qtddezenas=$2
metadeqtddezenas=$(echo "$qtddezenas"/2 | bc)
dezezenasasereremexcluidas=$(shuf -i 1-$qtddezenas -n 1)
n=1
while (( $n <= $qtdjogos ))
do
if [ $n -lt 10 ]
then
echo -n "Jogo "0"$n: "
else
echo -n "Jogo $n: "
fi
n=$(( n+1 ))
jogos1a30=$(shuf -i 1-30 -n $metadeqtddezenas | tr -d ',e' | tr -s ' ' | sed 's/ / \n/g' | sort -n | while read a; do printf '%02d ' $a ; done)
jogos31a60=$(shuf -i 31-60 -n $metadeqtddezenas | tr -d ',e' | tr -s ' ' | sed 's/ / \n/g' | sort -n | while read a; do printf '%02d ' $a ; done)
echo $jogos1a30 $jogos31a60
done >> jogosformatado.txt
cat jogosformatado.txt | awk '{$1="";$2=""; print $0}' | sed 's/^ \+//' > jogosformatado1.txt
cp jogosformatado1.txt jogos.txt
chown www-data jogos.txt
chgrp www-data jogos.txt
cat jogos.txt

Boa noite diramos.
Segue sugestão para a questão "01":
#!/usr/bin/env bash

function erro(){ echo -e "\e[0;38mERRO\e[m";exit 0; }

(("$1")) && qtdjogos="$1" || erro # Testa se $1 é Número && $1>0
(("$2")) && qtddezenas="$2" || erro
(($((qtdjogos*qtddezenas)) > 60)) && erro # $1*$2 <= 60

>jogosformatado.txt
n=1;
dez=({01..60}); #Matriz com as dezenas

while (( $n <= $qtdjogos ));do
sorteados=($(shuf -n${qtddezenas} <<< $(printf "%s\n" ${dez[@]})|paste -sd" "));
#Para cada "cartela" gerada, as dezenas são excluídas da matriz "dez",
#Dessa forma, é imposto um limite, linha 07 do script.

for X in ${sorteados[@]};do
dez=($(sed -r "s/${X}[ ]?//" <<< "${dez[@]}"));
done
(printf "Jogo %02d: " "$n";echo "${sorteados[@]}")|tee -a jogosformatado.txt
n=$(( n+1 ));
done

---------------------------------------------------------------------------------------------------------------


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts