中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Shell腳本實現(xiàn)亂序排列文件內(nèi)容的多種方法(洗牌問題)
來源:易賢網(wǎng) 閱讀:1464 次 日期:2015-01-30 14:12:40
溫馨提示:易賢網(wǎng)小編為您整理了“Shell腳本實現(xiàn)亂序排列文件內(nèi)容的多種方法(洗牌問題)”,方便廣大網(wǎng)友查閱!

洗牌問題:洗一副撲克,有什么好辦法?既能洗得均勻,又能洗得快?即相對于一個文件來說怎樣高效率的實現(xiàn)亂序排列?

ChinaUnix 確實是 Shell 高手云集的地方,只要你想得到的問題,到那里基本上都能找到答案。r2007 給出了一個取巧的方法,利用 Shell 的 $RANDOM 變量給原文件的每一行加上隨機的行號然后根據(jù)這個隨機行號進行排序,再把臨時加上去的行號給過濾掉,這樣操作之后得到的新文件就相當(dāng)于被隨機“洗”了一次:

代碼如下:

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

當(dāng)然如果你的源文件每行的內(nèi)容比較復(fù)雜的話就必須對這段代碼進行改寫,但只要知道了處理的關(guān)鍵技巧,剩下的問題都不難解決。

另外一篇來自蘇蓉蓉的用 awk 來實現(xiàn)洗牌效果的隨機文件排序代碼分析(原貼在這里,以及對此帖的一個后續(xù)討論,如果你沒有登錄帳號的話可以到這里查看精華區(qū)文章)則寫的更為詳細(xì):

--------------------------------------------------------------------

關(guān)于洗牌問題,其實已經(jīng)有了一個很好的shell解法,這里另外給三個基于AWK的方法,有錯誤之處還請不吝指出。

方法一:窮舉

類似于窮舉法,構(gòu)造一個散列來記錄已經(jīng)打印行出現(xiàn)行的次數(shù),如果出現(xiàn)次數(shù)多于一次則不進行處理,這樣可以防止重復(fù),但缺點是加大了系統(tǒng)的開銷。

代碼如下:

awk -v N=`sed -n '$=' data` '

BEGIN{

FS="\n";

RS=""

}

{

srand();

while(t!=N){

x=int(N*rand()+1);

a[x]++;

if(a[x]==1)

{

print $x;t++

}

}

}

' data

方法二:變換

基于數(shù)組下標(biāo)變換的辦法,即用數(shù)組儲存每行的內(nèi)容,通過數(shù)組下標(biāo)的變換交換數(shù)組的內(nèi)容,效率好于方法一。

代碼如下:

#! /usr/awk

BEGIN{

srand();

}

{

b[NR]=$0;

}

END{

C(b,NR);

for(x in b)

{

print b[x];

}}

function C(arr,len,i,j,t,x){

for(x in arr)

{

i=int(len*rand())+1;

j=int(len*rand())+1;

t=arr[i];

arr[i]=arr[j];

arr[j]=t;

}

}

方法三:散列

三個方法中最好的。

利用AWK中散列的特性(詳細(xì)請看:info gawk 中的7.x ),只要構(gòu)造一個隨機不重復(fù)的散列函數(shù)即可,因為一個文件每行的linenumber是獨一無二的,所以用:

隨機數(shù)+每行l(wèi)inenumber ------對應(yīng)------> 那一行的內(nèi)容

即為所構(gòu)造的隨機函數(shù)。

從而有:

代碼如下:

awk 'BEGIN{srand()}{b[rand()NR]=$0}END{for(x in b)print b[x]}' data

其實大家擔(dān)心的使用內(nèi)存過大的問題不必太在意,可以做一個測試:

測試環(huán)境:

PM 1.4GHz CPU,40G硬盤,內(nèi)存256M的LAPTOP

SUSE 9.3 GNU bash version 3.00.16 GNU Awk 3.1.4

產(chǎn)生一個五十幾萬行的隨機文件,大約有38M:

代碼如下:

od /dev/urandom |dd count=75000 >data

拿效率較低的方法一來說:

洗牌一次所用時間:

代碼如下:

time awk -v N=`sed -n '$=' data` '

BEGIN{

FS="\n";

RS=""

}

{

srand();

while(t!=N){

x=int(N*rand()+1);

a[x]++;

if(a[x]==1)

{

print $x;t++

}

}

}

' data

結(jié)果(文件內(nèi)容省略):

代碼如下:

real 3m41.864s

user 0m34.224s

sys 0m2.102s

所以效率還是勉強可以接受的。

方法二的測試:

代碼如下:

time awk -f awkfile datafile

結(jié)果(文件內(nèi)容省略):

代碼如下:

real 2m26.487s

user 0m7.044s

sys 0m1.371s

效率明顯好于第一個。

接著考察一下方法三的效率:

代碼如下:

time awk 'BEGIN{srand()}{b[rand()NR]=$0}END{for(x in b)print b[x]}' data

結(jié)果(文件內(nèi)容省略):

代碼如下:

real 0m49.195s

user 0m5.318s

sys 0m1.301s

對于一個38M的文件來說已經(jīng)相當(dāng)不錯了。

--------------------------------------------------------------------

附帶存一個來自 flyfly 寫的 python 版本亂序代碼:

代碼如下:

#coding:gb2312

import sys

import random

def usage():

print "usage:program srcfilename dstfilename"

global filename

filename = ""

try:

filename = sys.argv[1]

except:

usage()

raise()

#open the phonebook file

f = open(filename, 'r')

phonebook = f.readlines()

print phonebook

f.close()

#write to file randomly

try:

filename = sys.argv[2]

except:

usage()

raise()

f = open(filename, 'w')

random.shuffle(phonebook)

f.writelines(phonebook)

f.close()

更多信息請查看IT技術(shù)專欄

更多信息請查看腳本欄目
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲淫性视频| 亚洲视频综合在线| 欧美在线一二三四区| 国产手机视频一区二区| 久久久久国产一区二区三区四区 | 久久亚洲高清| 亚洲国内欧美| 国产精品自在欧美一区| 免费不卡在线视频| 欧美一区二视频| 中文欧美在线视频| 亚洲精品久久久一区二区三区| 国产欧美一区二区三区国产幕精品 | 国产日韩av高清| 欧美成人xxx| 亚洲视频香蕉人妖| 亚洲美女中出| 亚洲人成在线播放网站岛国| 国产日韩欧美另类| 欧美日本高清视频| 麻豆成人在线| 一本大道久久a久久精二百| 悠悠资源网亚洲青| 国产丝袜一区二区| 国产精品国产亚洲精品看不卡15 | 伊人激情综合| 国产亚洲精品aa| 国产精品久久久久久久久动漫| 久久综合网hezyo| 午夜一区二区三视频在线观看| 香蕉久久一区二区不卡无毒影院| 亚洲欧洲一区二区天堂久久| 一区精品久久| 欧美区在线观看| 久久久久久一区二区| 午夜视频在线观看一区| 狠狠色香婷婷久久亚洲精品| 国产精品高清网站| 免费成人在线视频网站| 久久亚洲不卡| 久久综合电影| 久久久久久黄| 欧美在线一区二区三区| 久久久久久夜| 美腿丝袜亚洲色图| 久久噜噜亚洲综合| 欧美日韩视频一区二区| 国产精品久久久久久久app | 欧美日本一区二区三区| 欧美日韩精品伦理作品在线免费观看 | 国产亚洲精品久久久久动| 国产精品午夜久久| 国产一区二区三区成人欧美日韩在线观看| 国产精品日日摸夜夜摸av| 国产精品资源| 激情懂色av一区av二区av| 国产欧美日韩精品丝袜高跟鞋| 精品91在线| 亚洲国产中文字幕在线观看| 亚洲免费av观看| 亚洲综合大片69999| 牛人盗摄一区二区三区视频| 欧美凹凸一区二区三区视频| 欧美日韩亚洲一区| 国产伦精品一区二区三区视频黑人 | 欧美va天堂在线| 欧美日韩精品一区二区| 国产精品入口日韩视频大尺度| 黄色一区二区在线| 亚洲精品在线免费| 亚洲在线成人精品| 久久久噜噜噜久久| 欧美日韩伦理在线| 国产亚洲欧美激情| 日韩写真视频在线观看| 久久久久久综合| 欧美午夜精品久久久久久人妖| 国产视频精品网| 亚洲精品国产精品国自产观看| 午夜一区在线| 欧美精品一区二| 国产女人精品视频| 亚洲欧洲精品一区二区| 久久精品五月婷婷| aa国产精品| 欧美综合第一页| 欧美日韩精品国产| 在线欧美一区| 久久久久久一区| 国产精品一区亚洲| 一区二区三区欧美亚洲| 玖玖综合伊人| 在线欧美一区| 久久久久免费视频| 国产精品人成在线观看免费 | 久久免费视频一区| 国产精品乱人伦中文| 国产一区二区三区自拍| 中文av字幕一区| 欧美成人福利视频| 极品尤物久久久av免费看| 亚洲中字在线| 欧美午夜宅男影院| 一本大道久久a久久综合婷婷| 欧美a一区二区| 激情久久五月| 久久国产精品电影| 国产女精品视频网站免费| 一区二区三区在线观看国产| 久久久7777| 国产三区二区一区久久| 亚洲一区二区免费看| 亚洲一区日韩在线| 国产精品一区久久久| 亚洲性线免费观看视频成熟| 性亚洲最疯狂xxxx高清| 亚洲午夜视频在线| 国产精品极品美女粉嫩高清在线| 国产精品99久久久久久人| 国产精品国产三级国产普通话99| 亚洲一区二区久久| 国产伦理精品不卡| 久久全球大尺度高清视频| 亚洲国产一二三| 欧美亚洲成人精品| 久久av二区| 91久久精品www人人做人人爽| 欧美日韩国产丝袜另类| 午夜精品久久| 亚洲第一在线综合在线| 欧美日韩综合视频网址| 欧美在线视频二区| 亚洲精品一区在线观看香蕉| 国产精品丝袜久久久久久app| 久久视频精品在线| 一本色道精品久久一区二区三区| 国产九区一区在线| 欧美国产日韩在线| 欧美一级网站| 99国产精品久久久久久久成人热| 国产亚洲精品aa午夜观看| 欧美日韩国产精品专区| 欧美伊人精品成人久久综合97| 91久久国产自产拍夜夜嗨| 国产精品资源| 欧美日韩国产高清视频| 久久综合色播五月| 性伦欧美刺激片在线观看| 999亚洲国产精| 黄色成人在线网站| 国产精品夜夜嗨| 欧美精品在线看| 久久综合狠狠综合久久综合88| 亚洲一卡久久| 一本到12不卡视频在线dvd| 一区二区亚洲精品| 国产欧美日韩精品一区 | 久久色中文字幕| 亚洲专区在线视频| 日韩视频免费观看| 一区二区在线观看av| 国产伦精品一区二区三区免费 | 日韩视频久久| 在线免费观看欧美| 国产精品一区二区久久久久| 欧美日韩一区二区三区免费看| 老司机一区二区| 久久五月婷婷丁香社区| 久久国产66| 性高湖久久久久久久久| 99re6这里只有精品视频在线观看| 在线不卡亚洲| 在线观看亚洲a| 一区三区视频| 在线观看亚洲精品| 亚洲国产综合在线| 欧美大片在线观看一区| 在线一区二区日韩| 一区二区三区视频在线看| 亚洲二区在线观看| 亚洲国产日韩欧美综合久久| 在线精品视频一区二区| 在线欧美一区| 亚洲激情成人在线| 国产一在线精品一区在线观看| 国产日韩精品在线| 国产亚洲视频在线| 国内一区二区在线视频观看| 激情校园亚洲| 最新亚洲一区| 在线中文字幕一区| 亚洲在线观看视频| 亚洲欧美日韩在线播放| 性欧美xxxx视频在线观看| 欧美在线啊v一区| 久久久青草青青国产亚洲免观| 免费成人激情视频| 欧美三级特黄| 国产日韩一区欧美| 亚洲国产精品ⅴa在线观看|