亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果? [打印本頁]

作者: 大紅機(jī)器    時(shí)間: 2004-04-19 15:10
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
比如一文件里為
1
2
3
4
5
如何使每次顯示順序都不同?
C語言的話用指針很簡(jiǎn)單,用shell的話方法也不是沒有,但是速度是很大問題。
還請(qǐng)各位高手幫忙
作者: forest077    時(shí)間: 2004-04-19 15:20
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
你是想要隨機(jī)的效果嗎?
作者: 大紅機(jī)器    時(shí)間: 2004-04-19 15:22
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
洗牌嘛,當(dāng)然是隨機(jī)效果咯
作者: 網(wǎng)中人    時(shí)間: 2004-04-19 15:43
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
我記得之前有討論過,當(dāng)時(shí)我是用 $RAMDOM 除以總行數(shù)再取餘數(shù)來重排的...
不過我忘了貼子在哪裡了...
作者: 大紅機(jī)器    時(shí)間: 2004-04-19 15:49
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
原帖由 "網(wǎng)中人" 發(fā)表:
我記得之前有討論過,當(dāng)時(shí)我是用 $RAMDOM 除以總行數(shù)再取餘數(shù)來重排的...
不過我忘了貼子在哪裡了...

不太明白,這樣的話會(huì)不會(huì)出現(xiàn)一行被顯示多次的情況呢?還請(qǐng)老大詳細(xì)說說
作者: r2007    時(shí)間: 2004-04-19 15:50
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
有一個(gè)巧方法,機(jī)器兄可以試試
  1. while read i;do echo "$i $RANDOM";done<file|sort -k2n|cut -d" " -f1
復(fù)制代碼

作者: 網(wǎng)中人    時(shí)間: 2004-04-19 15:57
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
r2007 兄的方法很妙﹗  ^_^
作者: 大紅機(jī)器    時(shí)間: 2004-04-19 16:02
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
[quote]原帖由 "r2007"]while read i;do echo "$i $RANDOM";done<file|sort -k2n|cut -d" " -f1[/quote 發(fā)表:

看傻了,呵呵
作者: admirer    時(shí)間: 2004-04-19 16:48
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
[quote]原帖由 "r2007"][/quote 發(fā)表:

妙。
作者: labrun    時(shí)間: 2004-04-19 17:07
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
用awk中的rand()怎么每次都一樣?
比如awk 'BEGIN{print rand()}'
作者: nkoldbug    時(shí)間: 2004-04-19 17:24
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: labrun    時(shí)間: 2004-04-19 17:37
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
一樣,所以我想r2007也是因?yàn)槿绱硕挥胊wk。
nkoldbug你的sco每次都不同么?
作者: nkoldbug    時(shí)間: 2004-04-19 18:05
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: forest077    時(shí)間: 2004-04-19 20:47
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
要用awk產(chǎn)生隨機(jī)數(shù),先要種隨機(jī)種子!

  1. awk 'BEGIN{srand()}{print rand()}'
復(fù)制代碼

諸位可以試試,這樣就隨機(jī)了。
作者: @龍井茶    時(shí)間: 2004-04-19 21:07
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
好像awk的rand()的值每次都一樣的,那還叫什么隨機(jī)數(shù),
shell中echo $RANDOM 是不一樣的,不知道為什么會(huì)這樣?
想不出什么招比r2007的方法更好了
作者: admirer    時(shí)間: 2004-04-19 21:14
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
原帖由 "labrun" 發(fā)表:
一樣,所以我想r2007也是因?yàn)槿绱硕挥胊wk。
nkoldbug你的sco每次都不同么?

當(dāng)然是一樣的,這是由awk的特性決定的:
rand()      得出一個(gè)亂數(shù)值。此亂數(shù)值平均分布在 0 和 1 之間。這個(gè)
           值不會(huì)是 0,也不會(huì)是 1。                                   
           每次執(zhí)行 gawk,rand 開始產(chǎn)生數(shù)字從相同點(diǎn)或 seed。
srand(x)    設(shè)定產(chǎn)生亂數(shù)的開始點(diǎn)或seed為x。如果在第二次你設(shè)           
           定相同的 seed 值,你將再度得到相同序列的亂數(shù)值。
           如果省略引數(shù) x,例如 srand(),則現(xiàn)在的日期、時(shí)間會(huì)   
           被當(dāng)成 seed。這個(gè)方法可使得亂數(shù)值是真正不可預(yù)測(cè)的。     
           srand 的傳回值(return value)是前次所設(shè)定的 seed 值。

所以要想讓awk每次產(chǎn)生不同的隨機(jī)數(shù)起始值,必須要用srand()進(jìn)行初始設(shè)置。
  1. awk 'BEGIN{srand()}{print rand()}'
復(fù)制代碼

作者: 光明曉仙    時(shí)間: 2004-04-20 00:33
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
while read i;do echo "$i $RANDOM";done<file|sort -k2n|cut -d" " -f1


沒看懂...................
作者: xyb    時(shí)間: 2004-04-20 10:13
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
洗牌的shell實(shí)現(xiàn)可以到網(wǎng)上去找,但這里用不著洗牌,反正你只取其中“一張”而已:
f=a.txt; sed -n $((RANDOM%`cat $f|wc -l`+1)){p\;q} $f
這個(gè)比上面用awk的效率會(huì)稍好一點(diǎn),一個(gè)是她只需要生成一個(gè)隨機(jī)數(shù),而不是每行對(duì)應(yīng)一個(gè); 另一個(gè)是用sed可以在取到需要的行后及時(shí)退出,省掉了機(jī)器費(fèi)力去讀取后面的內(nèi)容。
作者: forest077    時(shí)間: 2004-04-20 11:23
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
原帖由 "光明曉仙" 發(fā)表:

沒看懂...................

這個(gè)算法為每張牌產(chǎn)生一個(gè)隨機(jī)數(shù),然后根據(jù)這些隨機(jī)數(shù)為每張牌排序,因?yàn)槭请S機(jī)數(shù),所以排序以后牌的舊順序就被打亂了,這時(shí)再把牌打印出來,就是隨機(jī)順序。
作者: telephone    時(shí)間: 2004-04-20 11:40
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
原帖由 "@龍井茶" 發(fā)表:
好像awk的rand()的值每次都一樣的,那還叫什么隨機(jī)數(shù),
shell中echo $RANDOM 是不一樣的,不知道為什么會(huì)這樣?
想不出什么招比r2007的方法更好了

forest077兄說的已經(jīng)很清楚了,用srand函數(shù)產(chǎn)生隨機(jī)種子,這樣,rand每次就不同了
作者: xyb    時(shí)間: 2004-04-20 13:54
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
  1. f=a.txt; sed -n $((RANDOM%`cat $f|wc -l`+1)){p\;q} $f
復(fù)制代碼

剛意識(shí)到一個(gè)小問題,這條命令只在對(duì)付少于65536行的文件時(shí)才正確,請(qǐng)使用時(shí)注意。當(dāng)然也可以擴(kuò)展一下:
  1. f=a.txt; sed -n $((($RANDOM*65536 + $RANDOM)%`cat $f|wc -l`+1)){p\;q} $f
復(fù)制代碼

這樣可以對(duì)付65536*65536行了,大概一般情況足夠了吧?就是有點(diǎn)太長(zhǎng)了。值得注意的是,這里的兩個(gè)RANDOM前面都要加$符號(hào),大家不要忘了。
作者: 大紅機(jī)器    時(shí)間: 2004-04-20 14:09
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
[quote]原帖由 "xyb"]洗牌的shell實(shí)現(xiàn)可以到網(wǎng)上去找,但這里用不著洗牌,反正你只取其中“一張”而已:[/quote 發(fā)表:

???我就是要洗牌啊!
取一張的話這樣也可以吧:
  1. sed -n $(echo $RANDOM*$(cat file|wc -l)/32768|bc)p file
復(fù)制代碼

作者: bjgirl    時(shí)間: 2004-04-20 16:17
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
原帖由 "@龍井茶" 發(fā)表:
好像awk的rand()的值每次都一樣的,那還叫什么隨機(jī)數(shù),
shell中echo $RANDOM 是不一樣的,不知道為什么會(huì)這樣?
想不出什么招比r2007的方法更好了
對(duì)的,
作者: xyb    時(shí)間: 2004-04-21 09:17
標(biāo)題: 如何用shell實(shí)現(xiàn)“洗牌”效果?
[quote]原帖由 "大紅機(jī)器"][/quote 發(fā)表:

哦,是我搞錯(cuò)了,對(duì)不起啦  
作者: jashy    時(shí)間: 2006-07-03 12:54
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: yjh777    時(shí)間: 2006-07-05 10:32
原帖由 光明曉仙 于 2004-4-20 00:33 發(fā)表
while read i;do echo "$i $RANDOM";done<file|sort -k2n|cut -d" " -f1


沒看懂...................


作了一個(gè)隨機(jī)數(shù)的索引,然后排序,被索引的內(nèi)容自然就跟著隨機(jī)了..




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2