명령 출력에서 ​​임의의 요소를 선택하는 방법은 무엇입니까?

명령 출력에서 ​​임의의 요소를 선택하는 방법은 무엇입니까?

다음과 같은 것이 있다면:

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

관련 정보