免费注册 查看新帖 |

Chinaunix

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

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

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

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

  1. f=a.txt; sed -n $((RANDOM%`cat $f|wc -l`+1)){p\;q} $f
复制代码

刚意识到一个小问题,这条命令只在对付少于65536行的文件时才正确,请使用时注意。当然也可以扩展一下:
  1. f=a.txt; sed -n $((($RANDOM*65536 + $RANDOM)%`cat $f|wc -l`+1)){p\;q} $f
复制代码

这样可以对付65536*65536行了,大概一般情况足够了吧!?就是有点太长了。值得注意的是,这里的两个RANDOM前面都要加$符号,大家不要忘了。

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

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

[quote]原帖由 "xyb"]洗牌的shell实现可以到网上去找,但这里用不着洗牌,反正你只取其中“一张”而已:[/quote 发表:

???我就是要洗牌啊!
取一张的话这样也可以吧:
  1. sed -n $(echo $RANDOM*$(cat file|wc -l)/32768|bc)p file
复制代码

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

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

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

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

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

[quote]原帖由 "大红机器"][/quote 发表:

哦,是我搞错了,对不起啦  
jashy 该用户已被删除
25 [报告]
发表于 2006-07-03 12:54 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
26 [报告]
发表于 2006-07-05 10:32 |只看该作者
原帖由 光明晓仙 于 2004-4-20 00:33 发表
while read i;do echo "$i $RANDOM";done<file|sort -k2n|cut -d" " -f1


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


作了一个随机数的索引,然后排序,被索引的内容自然就跟着随机了..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP