我知道我可以用seq
生成一个随机的数字列表: 1,2,3,4.
我想把这些数字随机排列成3,1,4,2.
我知道我可以使用shuf
对文件行进行洗牌。所以我可以使用seq
将随机数字写入文件,然后使用shuf
对它们进行洗牌--或者编写某种洗牌函数。但这似乎是不必要的复杂。是否有更简单的方法用一个命令随机化数组中的项?
发布于 2016-02-03 02:10:01
POSIXly,以生成从min
到max
的十进制整数的混合列表:
awk -v min=1 -v max=10 'BEGIN{
for (i = min; i <= max; i++) a[i] = i
srand()
for (i = min; i <= max; i++) {
j = int(rand() * (max - min + 1)) + min
tmp = a[i]; a[i] = a[j]; a[j] = tmp
}
for (i = min; i <= max; i++) print a[i]
}'
请注意,对于许多awk实现,在同一秒钟内运行该命令两次将产生相同的结果(因为srand()
根据当前时间为伪随机生成器种子)。
https://unix.stackexchange.com/questions/124478
复制相似问题