假设我有一个文件列表和给定的概率(较大的数字表示概率较高)
如何生成随机序列来模拟相对概率,就像shuf
工具一样。
序列的长度可能短于文件集的数量。这应该是shell函数输入的一部分,因此任何轻量级解决方案(使用传统的Unix工具)都是首选,而使用繁重的库或平台(如Matlab)并不好。
答案 0 :(得分:1)
随机选择具有相对概率的文件:
$ cat file
fileA (8)
fileB (1)
fileC (3)
fileD (4)
使用此:
$ awk -F'[ ()]' '{for (i=1;i<=$(NF-1);i++) print $1}' file |shuf | head -n1
fileD
答案 1 :(得分:1)
awk
救援!
$ awk -v n=10 '{k=a[NR-1]+$2; a[NR]=k; v[k]=$1}
END{srand();
for(j=1;j<=n;j++)
{r=int(rand()*a[NR])+1;
for(i=1;i<=NR;i++)
if(r<=a[i]) {print v[a[i]]; break}}}' weights
$ cat weights
fileA 8
fileB 1
fileC 3
fileD 4
用法,根据相对权重创建10个随机样本
$ awk -v n=10 '...' weights
fileA
fileA
fileA
fileA
fileA
fileA
fileA
fileD
fileD
fileA