Command-Line
如何從命令的輸出中選擇一個隨機元素?
如果我有類似的東西:
echo 1 2 3 4 5 6
或者
echo man woman child
我必須在管道後面放什麼才能挑選出
1 2 3 4 5 6
or的一個元素man woman child
?echo 1 2 3 4 5 6 | command 3
如果你的系統有
shuf
命令echo 1 2 3 4 5 | xargs shuf -n1 -e
如果輸入真的不需要通過標準輸入回顯,那麼最好使用
shuf -n1 -e 1 2 3 4 5
如果你沒有 shuf(這是一個很棒的工具),但你有 bash,這裡有一個 bash-only 版本:
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這是範例用法和隨機 (!) 採樣(前導
$
是 shell 提示符;不要鍵入它們):$ 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