Se o seu sistema tiver o comando shuf
echo 1 2 3 4 5 | xargs shuf -n1 -e
Se a entrada não precisa ser para ser repetida via entrada padrão, então seria melhor usar
shuf -n1 -e 1 2 3 4 5
Se eu tiver algo como:
echo 1 2 3 4 5 6
ou
echo man woman child
O que devo colocar atrás do pipe para escolher um elemento de 1 2 3 4 5 6
ou man woman child
?
echo 1 2 3 4 5 6 | command
3
Se você não tiver o shuf (que é uma ótima ferramenta), mas você tem o bash, aqui está uma versão somente do bash:
function ref { # Random Element From
declare -a array=("$@")
r=$((RANDOM % ${#array[@]}))
printf "%s\n" "${array[$r]}"
}
Você teria que reverter o sentido da sua chamada - use ref man woman child
em vez de echo man woman child | command
. Note que $RANDOM
pode não ser "strongmente" aleatório - veja os comentários de Stephane em: link
Veja o exemplo de uso e uma amostragem aleatória (!) (os principais $
são o prompt do shell; não os digite):
$ ref man woman child
child
$ ref man woman child
man
$ ref man woman child
woman
$ ref man woman child
man
$ ref man woman child
man
$ ref 'a b' c 'd e f'
c
$ ref 'a b' c 'd e f'
a b
$ ref 'a b' c 'd e f'
d e f
$ ref 'a b' c 'd e f'
a b
# showing the distribution that $RANDOM resulted in
$ for loop in $(seq 1 1000); do ref $(seq 0 9); done | sort | uniq -c
93 0
98 1
98 2
101 3
118 4
104 5
79 6
100 7
94 8
115 9
Tags command-line random