De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Script para embaralhar aleatoriamente as linhas de um arquivo

Colaboração: Júlio Cezar Neves

Data de Publicação: 25 de setembro de 2017

O script de hoje ilustra uma forma de se embaralhar, de forma aleatória, as linhas de um arquivo.

1. Criação do Arquivo de teste

$ 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

2. Criação do Script mix.sh

$ cat mix.sh
#!/bin/sh

# Transforma o IFS em somente 
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


3. Execução do script

$ ./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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Júlio Cezar Neves