The UNIX and Linux Forums  


Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Como gerar um «matar» lista victorcheung UNIX & avançada para usuários experientes 10 05-15-2008 03:04
gerar números aleatórios em perl zx1106 Programação Shell Script e 2 03-18-2008 12:13
Gerar uma senha aleatória chiru_h Programação Shell Script e 5 10-07-2007 09:03
como gerar uma lista de arquivos jasongr Programação Shell Script e 3 12-13-2005 08:15
Como gerar um número aleatório? MacMonster Alto Nível de programação 2 10-15-2001 01:35

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 05-29-2006
mskcc mskcc is offline
Usuário
  
 

Join Date: Jul 2005
Lugares: 37
como gerar uma lista aleatória a partir de uma determinada lista

Caros Mestres,

Existe uma maneira fácil de gerar uma lista aleatória de dar uma lista de nomes? Vamos dizer, eu tenho um arquivo contendo o nome da cidade do mundo 15000 (planilha, nomes na primeira coluna), gostaria de pegar aleatoriamente 50 cidades cada vez de um total de 1000 picaretas. Ou quem não conhece um programa pode ser usado para esta finalidade?

Obrigado!
  #2 (permalink)  
Old 05-29-2006
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Localização: Ashburn, Virginia
Mensagens: 9.128
ksh tem um built-in gerador de números aleatórios. Trata-se de desempenho não é espectacular, mas é provável que seja bom o suficiente para seus propósitos. Irá gerar números aleatórios no intervalo de 0 a 32767. Você precisará de uma gama diferente. Utilize esta técnica:
Código:
#! /usr/bin/ksh

#
# RANDOM is a random number between 0 and 32767 (inclusive)
max_random=32768

#
# We want a random number between 0 and 14 (inclusive)
max_needed=15

i=0
while ((i<7)) ; do
        ((r=RANDOM*max_needed/max_random))
        echo $r
        ((i=i+1))
done

exit 0

Atenção: não use a operação módulo para converter o intervalo. O código acima é usando o elevado fim bits do número aleatório inicial, enquanto o módulo operação iria utilizar a baixa ordem bits. Então você poderia gerar um número aleatório entre 0 e 14999. Então você gostaria de acrescentar uma linha para obter um número entre 1 e 15000. Depois, é só usar sed ou alguma coisa para recuperar essa linha. (Ou algo assim. Eu me perdi na sua matemática ... Não entendo como escolher 50 cidades nos dá 1000 picaretas. )

Mas isto pressupõe que ele está ok para escolher o dobro lsame linha do arquivo cada agora e então. Muitas vezes isto é exatamente o que você deseja. Mas algumas vezes, não são duplicados ok. Suponhamos que existiam 52 linhas do arquivo que representa os cartões em um baralho de cartas de jogar. Se você deseja gerar um aleatório poker lado, você deve eliminar as duplicatas. Neste caso, você deve primeiro gerar um número entre 1 e 52 e, como antes, você deverá obter a linha seleccionada. Mas depois que você usa sed para excluir essa linha, deixando apenas 51 linhas do arquivo. Para sua segunda carta, você gera um número aleatório entre 1 e 51. E assim por diante.
  #3 (permalink)  
Old 05-29-2006
mskcc mskcc is offline
Usuário
  
 

Join Date: Jul 2005
Lugares: 37
obrigado

... é 50 picaretas de uma vez, mas repetir 1000 vezes, como re-shaffle e re-escolher e assim por diante.
  #4 (permalink)  
Old 05-30-2006
aigles's Avatar
aigles aigles is offline Forum Advisor  
Usuário
  
 

Join Date: Apr 2004
Location: Bordeaux, França
Mensagens: 1.433
Experimente algo assim

Código:
#! /usr/bin/ksh
#
# Usage: $0 [file [count]]
# 

File=${1}
Count=${2:-10}

while read line
do
   echo "$RANDOM$line"
done < $File     |  \
sort -t -k1,1n  |  \
head -$Count     |  \
cut -d -f2-

Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 02:13.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0