내 스크립트를 더 무작위로 만들기 위해 Shuf를 시간 시드가 있는 Rand(C++의)로 어떻게 바꿀 수 있습니까?

내 스크립트를 더 무작위로 만들기 위해 Shuf를 시간 시드가 있는 Rand(C++의)로 어떻게 바꿀 수 있습니까?

임의의 문자 집합에서 200자를 추출하는 스크립트가 있습니다.

tail -n+2 file.fasta | tr -d '\n' > newfile n=$(stat -c "%s" newfile) r=$(shuf -i1-"$((n-200+1))" -n1) newfile tail -c+"$r" | head -c200

시간 시드(srand(time(0))를 사용하여 rand()의 shuf를 변경할 수 있는지 아는 사람이 있습니까? 성공하지 못한 채 스크립트를 변경해 보았습니다.

어떤 제안이 있으십니까? 미리 감사드립니다

답변1

RANDOM이라는 Bash 변수가 있습니다. 읽을 때마다 해당 값은 0에서 32767(포함) 사이의 다른 임의의 정수입니다. 범위는 그리 넓지는 않지만 충분합니다.

RANDOM에 숫자를 할당하여 무작위 시퀀스를 시드할 수 있습니다. 나는 보통 이 목적을 위해 쉘 자체의 pid를 사용합니다.

Paul--) RANDOM=$$
Paul--) for j in {1..6}; do printf ' %d' $RANDOM; done
 16928 18765 4814 6954 3017 31155
Paul--) 

이것이 왜 용납될 수 없는지 잘 모르겠습니다 shuf. 이는 스케일링(쉘 산술을 사용하여 수행해야 함)을 제공하고 범위가 크며(최대 2^63 - 1) 몇 밀리초 내에 실행됩니다. (스크램블된 파일은 줄을 선택하기 전에 전체 파일을 읽기 때문에 속도가 느려질 수 있지만 -i를 사용하면 더 똑똑하게 작동합니다.)

추가 요구 사항이 무엇인지 설명해 주시면 더 나은 솔루션을 제공할 수 있습니다.

관련 정보