婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Shell腳本實現亂序排列文件內容的多種方法(洗牌問題)

Shell腳本實現亂序排列文件內容的多種方法(洗牌問題)

熱門標簽:地圖標注輻射圖案 安裝外呼系統費用 電銷機器人 劍魚 衛星地圖標注地名 寧波智能外呼系統公司 聯通電話機器人怎么接 申請公司400電話要注意什么 曲阜400電話辦理 奧維互動地圖標注參數

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

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

復制代碼 代碼如下:

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

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

另外一篇來自蘇蓉蓉的用 awk 來實現洗牌效果的隨機文件排序代碼分析(原貼在這里,以及對此帖的一個后續討論,如果你沒有登錄帳號的話可以到這里查看精華區文章)則寫的更為詳細:
--------------------------------------------------------------------
關于洗牌問題,其實已經有了一個很好的shell解法,這里另外給三個基于AWK的方法,有錯誤之處還請不吝指出。

方法一:窮舉

類似于窮舉法,構造一個散列來記錄已經打印行出現行的次數,如果出現次數多于一次則不進行處理,這樣可以防止重復,但缺點是加大了系統的開銷。

復制代碼 代碼如下:

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

方法二:變換

基于數組下標變換的辦法,即用數組儲存每行的內容,通過數組下標的變換交換數組的內容,效率好于方法一。

復制代碼 代碼如下:

#! /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中散列的特性(詳細請看:info gawk 中的7.x ),只要構造一個隨機不重復的散列函數即可,因為一個文件每行的linenumber是獨一無二的,所以用:

    隨機數+每行linenumber    ------對應------>    那一行的內容

    即為所構造的隨機函數。
    從而有:

復制代碼 代碼如下:

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

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

測試環境:

PM 1.4GHz CPU,40G硬盤,內存256M的LAPTOP
SUSE 9.3  GNU bash version 3.00.16 GNU Awk 3.1.4

產生一個五十幾萬行的隨機文件,大約有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

結果(文件內容省略):
復制代碼 代碼如下:

real    3m41.864s
user    0m34.224s
sys     0m2.102s

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

方法二的測試:

復制代碼 代碼如下:

time awk -f awkfile datafile

結果(文件內容省略):
復制代碼 代碼如下:

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

結果(文件內容省略):
復制代碼 代碼如下:

real    0m49.195s
user    0m5.318s
sys     0m1.301s

對于一個38M的文件來說已經相當不錯了。
--------------------------------------------------------------------

附帶存一個來自 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()

標簽:安康 上饒 三門峽 江西 大慶 仙桃 大興安嶺 遵義

巨人網絡通訊聲明:本文標題《Shell腳本實現亂序排列文件內容的多種方法(洗牌問題)》,本文關鍵詞  Shell,腳本,實現,亂序,排列,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Shell腳本實現亂序排列文件內容的多種方法(洗牌問題)》相關的同類信息!
  • 本頁收集關于Shell腳本實現亂序排列文件內容的多種方法(洗牌問題)的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日本一区二区三区四区| 日韩午夜av一区| 91 com成人网| **网站欧美大片在线观看| 午夜成人免费电影| 成人免费视频播放| 欧美变态tickling挠脚心| 亚洲曰韩产成在线| 不卡av在线免费观看| 精品日本一线二线三线不卡| 亚洲国产一区在线观看| 99精品久久久久久| 精品噜噜噜噜久久久久久久久试看| 亚洲精品国产视频| www.一区二区| 亚洲国产精华液网站w| 国内精品写真在线观看| 日韩色在线观看| 日韩精品亚洲一区| 欧美日韩国产大片| 亚洲成人午夜电影| 欧美性猛交一区二区三区精品| 亚洲视频你懂的| 99久久精品一区二区| 亚洲欧洲日本在线| 成人黄色免费短视频| 国产亚洲综合av| 丁香婷婷综合色啪| 国产精品高潮呻吟久久| 成人一级视频在线观看| 国产精品人妖ts系列视频| 粉嫩av一区二区三区在线播放 | 国产精品国产三级国产三级人妇| 国产伦精一区二区三区| 久久精品一区二区三区不卡| 国产在线精品免费| 久久久久久久久伊人| 国产大陆精品国产| 国产精品国产三级国产专播品爱网 | 国产在线精品一区二区夜色| 精品国产制服丝袜高跟| 国产综合色精品一区二区三区| 久久色在线视频| 成年人国产精品| 亚洲欧美日本韩国| 欧美精品日韩一区| 激情五月婷婷综合网| 国产日产欧美一区| 在线免费观看不卡av| 首页国产欧美久久| 日韩免费看网站| 成人性视频网站| 亚洲图片有声小说| 精品国产不卡一区二区三区| 国产成人午夜精品5599 | 91在线观看视频| 午夜伦欧美伦电影理论片| 日韩精品一区二区在线观看| 国产精品综合二区| 亚洲人妖av一区二区| 欧美男男青年gay1069videost| 久久精品999| 日韩毛片精品高清免费| 日韩亚洲欧美高清| 91片在线免费观看| 国产又黄又大久久| 亚洲国产精品一区二区www | 日本韩国欧美一区二区三区| 日韩av一区二区在线影视| 中文字幕av一区二区三区高| 欧美精品国产精品| 成人小视频在线观看| 五月开心婷婷久久| 国产精品麻豆欧美日韩ww| 欧美一级理论片| 91网址在线看| 国产麻豆精品在线| 视频一区视频二区在线观看| 中文字幕第一区综合| 91麻豆精品国产91| 欧洲精品在线观看| 成人动漫一区二区在线| 久久精品国产成人一区二区三区| 国产精品超碰97尤物18| 久久综合九色综合欧美98| 欧美色欧美亚洲另类二区| 成人福利视频在线| 国产老妇另类xxxxx| 日韩电影在线一区二区| 亚洲一区精品在线| 一区二区三区精品在线观看| 欧美韩国日本一区| 欧洲国内综合视频| 97久久精品人人做人人爽50路| 国产成人精品免费在线| 久久成人免费电影| 美日韩黄色大片| 午夜视频一区二区| 亚洲成人av一区二区| 亚洲黄网站在线观看| 亚洲男人都懂的| 亚洲黄色小说网站| 亚洲一区二区影院| 一区二区三区中文在线| 亚洲桃色在线一区| 亚洲色图一区二区| 亚洲摸摸操操av| 一区二区三区在线视频免费观看| 亚洲欧美中日韩| 一区二区三区鲁丝不卡| 亚洲成人激情综合网| 午夜伦欧美伦电影理论片| 日韩成人一区二区三区在线观看| 午夜精品久久久久久久久久久| 亚洲电影在线播放| 婷婷激情综合网| 久久精品国产亚洲5555| 国产精品资源网| 国产成人99久久亚洲综合精品| 国产大陆亚洲精品国产| 91视频在线看| 欧美综合欧美视频| 欧美一级片在线| 久久中文娱乐网| 亚洲欧洲av一区二区三区久久| 亚洲伦理在线免费看| 亚洲国产人成综合网站| 久久精品国产亚洲一区二区三区| 精品一区二区在线播放| 成人网在线播放| 欧美日韩国产综合一区二区三区 | 国产精品影视在线观看| 成人h精品动漫一区二区三区| 色呦呦日韩精品| 欧美日韩在线免费视频| 精品国产乱码久久久久久图片| 国产精品你懂的在线欣赏| 亚洲永久精品国产| 久久成人久久鬼色| 色悠悠亚洲一区二区| 精品久久久久久久久久久久久久久| 国产欧美日韩在线看| 亚洲狠狠爱一区二区三区| 韩国在线一区二区| 日本高清不卡视频| 久久免费国产精品| 天天综合网 天天综合色| 国产成人精品影院| 欧美日韩精品综合在线| 国产欧美一区二区精品仙草咪| 中文字幕在线播放不卡一区| 奇米综合一区二区三区精品视频| 国产1区2区3区精品美女| 7777精品伊人久久久大香线蕉的| 国产亚洲精品资源在线26u| 一区二区免费看| 国产**成人网毛片九色| 91精品国产品国语在线不卡| 国产精品久久久久久久久晋中| 热久久免费视频| 91黄色激情网站| 欧美国产日韩精品免费观看| 蜜桃av噜噜一区二区三区小说| 91色视频在线| 国产欧美精品一区aⅴ影院| 日韩av一区二| 欧美日韩一区二区在线观看视频 | 亚洲线精品一区二区三区八戒| 国产成人av一区二区三区在线 | 美女脱光内衣内裤视频久久网站| 99视频在线观看一区三区| 精品福利av导航| 日韩国产精品大片| 欧美色图免费看| 亚洲天堂精品视频| 成人av资源网站| 国产欧美日韩精品在线| 久久99久国产精品黄毛片色诱| 欧美高清你懂得| 香蕉久久一区二区不卡无毒影院 | 久久人人爽人人爽| 蜜桃一区二区三区四区| 在线不卡免费av| 午夜精品在线看| 欧美日韩国产电影| 日韩精品国产精品| 欧美男人的天堂一二区| 亚洲v精品v日韩v欧美v专区| 欧洲精品中文字幕| 午夜久久久影院| 欧美久久久一区| 日产精品久久久久久久性色| 欧美理论片在线| 男女男精品视频网| 精品国产免费人成电影在线观看四季| 麻豆精品久久精品色综合| 欧美白人最猛性xxxxx69交| 国产麻豆日韩欧美久久| 欧美激情一区二区三区全黄| 成人av高清在线|