免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 大红机器
打印 上一主题 下一主题

如何用shell实现“洗牌”效果?  关闭 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-04-19 17:24 |只看该作者

如何用shell实现“洗牌”效果?

去掉BEGIN试一下

论坛徽章:
0
12 [报告]
发表于 2004-04-19 17:37 |只看该作者

如何用shell实现“洗牌”效果?

一样,所以我想r2007也是因为如此而不用awk。
nkoldbug你的sco每次都不同么?

论坛徽章:
0
13 [报告]
发表于 2004-04-19 18:05 |只看该作者

如何用shell实现“洗牌”效果?

我在solaris上做的测试

论坛徽章:
0
14 [报告]
发表于 2004-04-19 20:47 |只看该作者

如何用shell实现“洗牌”效果?

要用awk产生随机数,先要种随机种子!

  1. awk 'BEGIN{srand()}{print rand()}'
复制代码

诸位可以试试,这样就随机了。

论坛徽章:
0
15 [报告]
发表于 2004-04-19 21:07 |只看该作者

如何用shell实现“洗牌”效果?

好像awk的rand()的值每次都一样的,那还叫什么随机数,
shell中echo $RANDOM 是不一样的,不知道为什么会这样?
想不出什么招比r2007的方法更好了

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
16 [报告]
发表于 2004-04-19 21:14 |只看该作者

如何用shell实现“洗牌”效果?

原帖由 "labrun" 发表:
一样,所以我想r2007也是因为如此而不用awk。
nkoldbug你的sco每次都不同么?

当然是一样的,这是由awk的特性决定的:
rand()      得出一个乱数值。此乱数值平均分布在 0 和 1 之间。这个
           值不会是 0,也不会是 1。                                   
           每次执行 gawk,rand 开始产生数字从相同点或 seed。
srand(x)    设定产生乱数的开始点或seed为x。如果在第二次你设           
           定相同的 seed 值,你将再度得到相同序列的乱数值。
           如果省略引数 x,例如 srand(),则现在的日期、时间会   
           被当成 seed。这个方法可使得乱数值是真正不可预测的。     
           srand 的传回值(return value)是前次所设定的 seed 值。

所以要想让awk每次产生不同的随机数起始值,必须要用srand()进行初始设置。
  1. awk 'BEGIN{srand()}{print rand()}'
复制代码

论坛徽章:
0
17 [报告]
发表于 2004-04-20 00:33 |只看该作者

如何用shell实现“洗牌”效果?

while read i;do echo "$i $RANDOM";done<file|sort -k2n|cut -d" " -f1


没看懂...................

论坛徽章:
0
18 [报告]
发表于 2004-04-20 10:13 |只看该作者

如何用shell实现“洗牌”效果?

洗牌的shell实现可以到网上去找,但这里用不着洗牌,反正你只取其中“一张”而已:
f=a.txt; sed -n $((RANDOM%`cat $f|wc -l`+1)){p\;q} $f
这个比上面用awk的效率会稍好一点,一个是她只需要生成一个随机数,而不是每行对应一个; 另一个是用sed可以在取到需要的行后及时退出,省掉了机器费力去读取后面的内容。

论坛徽章:
0
19 [报告]
发表于 2004-04-20 11:23 |只看该作者

如何用shell实现“洗牌”效果?

原帖由 "光明晓仙" 发表:

没看懂...................

这个算法为每张牌产生一个随机数,然后根据这些随机数为每张牌排序,因为是随机数,所以排序以后牌的旧顺序就被打乱了,这时再把牌打印出来,就是随机顺序。

论坛徽章:
0
20 [报告]
发表于 2004-04-20 11:40 |只看该作者

如何用shell实现“洗牌”效果?

原帖由 "@龙井茶" 发表:
好像awk的rand()的值每次都一样的,那还叫什么随机数,
shell中echo $RANDOM 是不一样的,不知道为什么会这样?
想不出什么招比r2007的方法更好了

forest077兄说的已经很清楚了,用srand函数产生随机种子,这样,rand每次就不同了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP