O Perl não é uma ferramenta tão boa para isso porque você precisa de uma biblioteca de terceiros para gerar números aleatórios com segurança. O gerador de números aleatórios padrão ( rand
ou qualquer outra coisa que use a mesma origem, como List::Util::shuffle
) não é adequado para nada relacionado à segurança. Se você quiser usar o Perl, instale Math :: Random :: Secure (e sua dependências) ( perl -MCPAN -eshell
e executar install Math::Random::Secure
).
perl -MMath::Random::Secure=rand -l -e '@words = <>; print map $words[rand(@words)], 1..4' words.txt
Sugiro usar o Python. Hoje em dia, é tão comum quanto o Perl, e sua biblioteca padrão é muito melhor arredondada. Sim, o código é mais longo, mas o código curto não é em si um sinal de qualidade.
python -c 'import random, sys; rng = random.SystemRandom(); words = sys.stdin.readlines(); print " ".join([words[rng.randrange(0, len(words))][:-1] for i in xrange(4)])' <words.txt
Em um formulário multilinha mais legível:
import random, sys
rng = random.SystemRandom()
words = sys.stdin.readlines()
print " ".join([words[rng.randrange(0, len(words))][:-1] for i in xrange(4)])
Alternativamente, se você tiver coreutils GNU não antigos, que é o caso de Linux e Cygwin não embutidos, você pode usar o shuf
. Você precisa passar um gerador aleatório seguro com a opção --random-source
.
shuf --random-source=/dev/urandom -r -n 4 words.txt