我试图在下面的bash命令中推断如何生成两个随机数作为readproportion
,updateproportion
参数的输入值,其方式是这些参数的总和应该等于1。
$ ./bin/ycsb run basic -P workloads/workloada -p readproportion=0.50 -p updateproportion=0.50
请帮助您提出建议。
由于
答案 0 :(得分:3)
据我所知,$ {RANDOM}在0 - 32767区间内生成整数。所以,我想,你可能想尝试这样的东西在[0,1]中生成随机值:
bc -l <<< "scale=4 ; ${RANDOM}/32767"
答案 1 :(得分:2)
$ arr=( $(awk 'BEGIN{srand(); r=rand(); print r, 1-r}') )
$ echo "${arr[0]}"
0.661624
$ echo "${arr[1]}"
0.338376
$ arr=( $(awk 'BEGIN{srand(); r=rand(); printf "%.2f %.2f\n", r, 1-r}') )
$ echo "${arr[0]}"
0.74
$ echo "${arr[1]}"
0.26
srand()
每秒只更新一次种子,但只要您不需要每秒更频繁地调用脚本,就应该没问题。
答案 2 :(得分:1)
罗伯特J的想法:
RANDOM=$$ # Reseed using script's PID
r1=$((${RANDOM}%98+1))
r2=$((100-$r1))
printf -v r1 "0.%.2d" $r1
printf -v r2 "0.%.2d" $r2
echo "$r1 $r2"
输出(例如):
0.66 0.34 0.01 0.99 0.42 0.58 0.33 0.67 0.22 0.78 0.33 0.67 0.65 0.35 0.77 0.23 0.71 0.29
答案 3 :(得分:0)
这是一种超级简单的方法:
move
^^不要使用和阅读以下^^
我看不懂:
var map = new L.Map('leaflet', {
'center': [52.378333, 4.9],
'zoom': 12,
'layers': [
L.tileLayer('//{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png', {
attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors, © <a href="http://cartodb.com/attributions">CartoDB</a>'
})
]
});
var marker = new L.Marker(map.getCenter()).addTo(map);
map.on('move', function () {
marker.setLatLng(this.getCenter());
});
正如所指出的那样,第一次迭代是可怕的。一旦我完全阅读了这个问题并尝试使用&#34;数字&#34;进行一些简单的数学运算。我意识到这是超级破碎的。您可以在以下网址阅读更多信息:
http://www.tldp.org/LDP/abs/html/randomvar.html - 和 - https://www.shell-tips.com/2010/06/14/performing-math-calculation-in-bash/
答案 4 :(得分:0)
这是“浪费”(它只是丢弃字符,直到 /dev/urandom
碰巧吐出足够多的 ascii 0
到 9
s),但它是安全的伪随机:
rand_frac() { echo -n 0.; LANG=C tr -dc 0-9 </dev/urandom | head -c12; }
然后,你可以
$ echo The random number is.... $(rand_frac)
The random number is.... 0.413856349581
LANG=C
用于防止 tr
因来自 /dev/urandom
的错误 UTF-8 序列而窒息。 -dc
表示d
删除后续字符类的c
补充(因此,删除除 0-9
之外的所有内容)。
您可以更改 0-9
以生成任意字符类,或将 head -c 12
调整为其他内容,这对于制作密码很有用。
答案 5 :(得分:0)
这很好用
$ bc -l <<< "scale=16; $(od -t u2 -An -N2 /dev/random)/(2 ^ 16)"
.2792053222656250