コマンド出力から任意の要素を選択する方法は?

コマンド出力から任意の要素を選択する方法は?

次のようなものがある場合:

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

関連情報