Embaralhando elementos de um vetor
Publicado por Sandro Marcell 19/03/2009
[ Hits: 7.275 ]
Homepage: http://sanmarcell.wordpress.com
Um exemplo que mostra como embaralhar os elementos de um vetor em shell script.
Este script é um "quase equivalente" à função "shuffle" de linguagens com Perl, PHP, etc... Como dito acima, isso é apenas um exemplo, então se for o caso adapte-o (ou melhore-o!) conforme desejado.
Falou!!! =)
#!/bin/zsh -f # # Embaralhando de forma simples elementos dum vetor. # # Sandro Marcell (sandro_marcell@yahoo.com.br) # Boa Vista, Roraima - 13/03/2009. (Sexta-feira 13!!!) # # Uso: script <valores> # # Ex.: # ./script 1 2 3 4 5 a b c d e # ./script `cat /etc/group` # # Obs.: # - Isto e apenas um esboco de codigo, a intencao e mostrar ao usuario uma # forma BEM SIMPLES de embaralhar elementos dum vetor. Portanto se for o # caso, adapte-o (ou melhore-o!) conforme desejar; # - Os dados de entrada/saida sao tratados como vetor; # - Este script e um 'quase equivalente' a funcao 'shuffle' de linguagens # como Perl, PHP, etc...; # - Quanto maior o array, melhor sera o nivel de 'embaralhamento'; # - Voce tambem pode utilizar a variavel $RANDOM, ao inves do modulo # de funcoes matematicas do zsh; # - Mais detalhes: 'man zsh'; # - Script passivel de melhorias! =) zmodload -i zsh/mathfunc seed=$$ default="zero um dois tres quatro cinco seis sete oito nove" # 'array' tera seus elementos embaralhados e 'shuffled' os armazenara. typeset -a array shuffled array=($*) shuffled=() [ -z "$array" ] && array=($(print $default)) # O 'pulo do gato' =) # A variavel 'size' ira conter como valor o tamanho do vetor, e com isso # determinara a quantidade de interacoes a serem realizadas pelo loop. size=${(w)#array} while ((i++ < size)) do # Gera-se um valor com base no tamanho do vetor. Esse valor sera # utilizado como indice, para referenciar elementos no vetor. #index=$((1 + (${(w)#array} * RANDOM / 32767))) index=$((1 + int(${(w)#array} * rand48(seed)))) # Utilizando o indice gerado, armazena-se o elemento por ele # referenciado em 'shuffled'. shuffled+=($array[$index]) # E para evitar que o elemento armazenado seja reutilizado, basta # remove-lo do vetor! # Obs.: Note que o vetor 'array' ao final do processo tera todos # os seus elementos removidos. array[$index]=() done print "$shuffled[*]" # Fim
Script de data e hora do sistema
Script Iptables ( Passou em Testes )
Script para calcular o valor fatorial de um numero
Configuração Apache e DNS (bind)
Atenção a quem posta conteúdo de dicas, scripts e tal (6)
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
O mínimo que você precisa saber sobre o terminal (parte 2)
O mínimo que você precisa saber sobre o terminal (parte 1)
Como iniciar uma máquina virtual do VirtualBox automaticamente no boot do LUbuntu 18 LTS
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como deixar as abas do Firefox mais fininhas
Mudar o gerenciador de login (GDM para SDDM)
"Tentando" fazer com que programas rodem no Wayland e no X11
Porblema com MergeList [RESOLVIDO] (10)
Melhor hospedagem em nuvem para projetos Laravel com baixo custo? [RES... (7)
Como baixar os drivers de áudio no linux mint? (7)
Como posso localizar o arquivo HTML da página inicial do GLPI dentro d... (2)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta