você está aqui: Home → Colunistas → Cantinho do Shell
Data de Publicação: 19 de Janeiro de 2007
O script de hoje ilustra uma forma de se embaralhar, de forma aleatória, as linhas de um arquivo.
$ seq -f "Numero %g" 10 > entrada.txt # Criando arq de teste $ cat entrada.txt Numero 1 Numero 2 Numero 3 Numero 4 Numero 5 Numero 6 Numero 7 Numero 8 Numero 9 Numero 10
# Agora o script $ cat mix.sh #!/bin/sh # Transforma o IFS em somente <ENTER> IFS=" " NumReg=$(cat entrada.txt | wc -l) # Total de Registros i=0 # j vai variar de 0 até NumReg-1 j=$((RANDOM % $NumReg)) for Reg in $(cat entrada.txt) do # Enquanto o array de saida (aSai) tiver cheio... while [ ${aSai[$j]} ] do j=$((RANDOM % $NumReg)) done aSai[$j]="$Reg" # Move registro para posição randomica no array done > saida.txt # Cria o arquivo de saida vazio # Mais um tipo de for :) for ((i=0; i<=$NumReg-1; i++)) do echo ${aSai[i]} >> saida.txt # Carrega aleatóriamente o arquivo de saida done
$ ./mix.sh $ cat saida.txt # Primeira tentativa Numero 8 Numero 2 Numero 3 Numero 1 Numero 5 Numero 10 Numero 7 Numero 9 Numero 6 Numero 4 $ ./mix.sh $ cat saida.txt # Segunda tentativa Numero 5 Numero 9 Numero 7 Numero 8 Numero 1 Numero 3 Numero 2 Numero 10 Numero 4 Numero 6
Um script com esta funcionalidade pode ter várias aplicações. Por exemplo, em um website, se queremos exibir em determinada página uma lista de links, em que desejamos rotacionar os links que aparecem no topo da página, podemos usa-lo para que a ordem seja sempre trocada. O script pode ser acionado via cron, de 10 em 10 minutos, por exemplo.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários