次のようなものがある場合:
echo 1 2 3 4 5 6
または
echo man woman child
1 2 3 4 5 6
または、その要素を選択するには、パイプの後ろに何を入れる必要がありますかman woman child
?
echo 1 2 3 4 5 6 | command
3
答え1
システムにshuf
次のコマンドがある場合
echo 1 2 3 4 5 | xargs shuf -n1 -e
実際に入力でない場合必要標準入力でエコーするには、以下を使用することをお勧めします。
shuf -n1 -e 1 2 3 4 5
答え2
shuf(素晴らしいツール)はありませんが、bashがある場合、bash専用のバージョンは次のようになります。
function ref { # Random Element From
declare -a array=("$@")
r=$((RANDOM % ${#array[@]}))
printf "%s\n" "${array[$r]}"
}
ref man woman child
代わりに呼び出しの意味を変更する必要がありますecho man woman child | command
。これは$RANDOM
「強く」ランダムではないかもしれません。 Stephaneの説明を参照してください。https://unix.stackexchange.com/a/140752/117549
以下は使用例とランダム(!)サンプリングです(先行は$
シェルプロンプトなので、入力しないでください)。
$ 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