Command-Line

如何從命令的輸出中選擇一個隨機元素?

  • November 13, 2017

如果我有類似的東西:

echo 1 2 3 4 5 6

或者

echo man woman child

我必須在管道後面放什麼才能挑選出1 2 3 4 5 6or的一個元素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

引用自:https://unix.stackexchange.com/questions/269422