zsh: array shuffle function
Publicado por Sandro Marcell 13/06/2009 (última atualização em 31/03/2010)
[ Hits: 7.133 ]
Homepage: http://sanmarcell.wordpress.com
Download zsh_knuth_shuffle (versão 2)
Já havia postado aqui no VOL um script com o mesmo propósito, mas resolvi reescrevê-lo e
implementá-lo por meio de uma função.
Na prática esta função (que só roda no zsh!) recebe como parâmetro um vetor qualquer e
embaralha aleatoriamente seus elementos. Ela pode ser considerada uma "quase equivalente" à
função shuffle de linguagens como Perl, PHP, etc...
Versão 2 - Enviado por Sandro Marcell em 25/03/2010
Changelog: Implementação via algoritmo Knuth-shuffle.
function shuffle { # Funcao que embaralha os elementos de um vetor. # Implementado e testado sob o zsh-4.3.2 # Sandro Marcell <sandro_marcell@yahoo.com.br> # Boa Vista, Roraima - 10/05/2009 # Executavel somente no zsh! [ ! $ZSH_VERSION ] && return 1 RANDOM=$$ # Definindo variaveis locais e seus tipos: local i array shuffled size index integer i size index typeset -a array shuffled array=($*) # Limitado a 32767 elementos, devido a $RANDOM # Determinando a quantidade de elementos no vetor. size=${(w)#array} ((size > 32767)) && { print "Ops! vetor excessivamente grande." return 1 } while ((i++ < size)) do # Gera-se um valor com base no tamanho do vetor. # Esse valor sera utilizado como indice, para # referenciar elementos no proprio vetor. index=$((1 + (${(w)#array} * RANDOM / 32767))) # Utilizando-se o indice gerado, armazena-se # o elemento por ele referenciado em 'shuffled'. shuffled+=($array[$index]) # Para evitar que elemento armazenado seja reutilizado # basta remove-lo de 'array'. array[$index]=() done [ -n "$shuffled[*]" ] && print "$shuffled[*]" || return 1 }
Abrir o browser lynx direto na página do Google
Script para calcular o valor fatorial de um numero
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Erro nas atualizações do Void Linux (0)
O que você está ouvindo agora? [2] (129)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter