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

Chinaunix

標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存 [打印本頁]

作者: sunkey    時(shí)間: 2003-11-11 11:09
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
我寫了一個(gè)程序,大家來看看吧。。。

數(shù)據(jù)文件: testfile
$cat testfile
1  --- I
2  --- L
3  --- O
4  --- V
5  --- E
6  --- Y
7  --- O
8  --- U
9  --- !
10 --- !

$rand_output.sh testfile
5  --- E
1  --- I
3  --- O
10 --- !
7  --- O
2  --- L
4  --- V
8  --- U
9  --- !
6  --- Y

$cat rand_output.sh


#!/bin/csh -f

set FILE = $1

set max_line_num = `wc -l $FILE | awk '{print $1}'`

nawk -v max_line=$max_line_num -f rand_out.awk $FILE > $FILE.randout

foreach LINE (`cat ${FILE}.randout`)

  awk '{if(NR == "'$LINE'"print;next;}' $FILE

end


$cat rand_out.awk


BEGIN{
       FS = " ";
       #max_line = 10 #max_line_num ;
       end_line = max_line+1;
       rand_line_now = 0;
       for(i=1;i<end_line;i++)line = 0;
       complete=0;
       current_line=1;
       no_same = 0;

       do
       {
        do
        {

         rand_line_now = int((rand()*end_line));

        }while( rand_line_now == 0 || rand_line_now >= end_line  )

       if(line[current_line]==0)
        line[current_line] = rand_line_now;
       else continue;

       j=1;
       no_same=1;
       while(j<current_line && no_same==1)
       {
         if(line[j] == line[current_line])
         {
                 no_same = 0
                 line[current_line] = 0;
         }
         else
         {
                 j++;
                 no_same=1;
         }
        }

       if(j==current_line && no_same==1 && current_line < max_line)
         current_line++;

       if(current_line == max_line && line[max_line] != 0 && no_same == 1 ) complete = 1;

       }while( complete == 0 )

    }

END{
   for(k=1;k<end_line;k++)
     print line[k];
   }


實(shí)際上我的想法是利用 awk 的rand來生成一個(gè)數(shù)據(jù)文件行數(shù)的隨機(jī)
排列,然后保存這個(gè)排列,最后按照該排列重新輸出文件。 其實(shí)如果
用C來實(shí)現(xiàn)可能會(huì)更簡(jiǎn)單,而且隨機(jī)性更強(qiáng),但用awk來實(shí)現(xiàn)會(huì)比較
方便,如果再加工一下可以作為簡(jiǎn)單的文本加密程序來處理一些敏感
信息的文本了。。 (只要把輸出的隨機(jī)行數(shù)列表保存在按照正常順序
輸出就行了)。 這里比較麻煩的處理就是怎么得到合法的隨機(jī)數(shù),并且
是不允許跟其他已經(jīng)得到的數(shù)重復(fù)的,其他就沒啥了~~~

                      

作者: sunkey    時(shí)間: 2003-11-11 14:12
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
應(yīng)該再弄個(gè)還原的scripts就齊了,給MM發(fā)過去,應(yīng)該還算比較好玩。。。。 :))

    。。。。沒人捧場(chǎng)說。。:(
作者: Greenergy    時(shí)間: 2003-11-11 20:50
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: 光明曉仙    時(shí)間: 2003-11-11 22:09
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
就是打亂可以,怎么還原啊...........
作者: sunkey    時(shí)間: 2003-11-12 09:41
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
原帖由 "Greenergy" 發(fā)表:

sunkey, csh,太好了.

有csh的問題向你請(qǐng)教


   分特。。差太遠(yuǎn),我也是現(xiàn)學(xué)現(xiàn)賣, 多來這里,跟大家學(xué)的。。。

                 
作者: sunkey    時(shí)間: 2003-11-12 10:44
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
[quote]原帖由 "光明曉仙"]就是打亂可以,怎么還原啊...........[/quote 發(fā)表:


因?yàn)檫@個(gè)程序本身就是隨機(jī)產(chǎn)生一組行號(hào)排列,還原就把產(chǎn)生的隨機(jī)
排列再按照順序換回去就是了。 假如利用樓上的隨機(jī)排序產(chǎn)生的隨機(jī)
亂排的文本為:

$cat 2u


#5  --- E;
#1  --- I;
#3  --- O;
#10 --- !;
#7  --- O;
#2  --- L;
#4  --- V;
#8  --- U;
#9  --- !;
#6  --- Y;


利用下面的程序即可還原:
$ rand_input.sh 2u

#1 --- I;
#2 --- L;
#3 --- O;
#4 --- V;
#5 --- E;
#6 --- Y;
#7 --- O;
#8 --- U;
#9 --- !;
#10 --- !;


其中代碼如下:
$cat rand_input.sh


#!/bin/csh -f

set FILE = $1
set rand_num_file = ${FILE}.randout

set max_line_num = `wc -l $FILE | awk '{print $1}'`

nawk -v max_line=${max_line_num} -v rf=${rand_num_file} -f rand_in.awk $FILE | sort -n | nawk '{$1="";print;next;}'



$cat rand_in.awk

BEGIN{
       FS = " ";
       end_line = max_line+1;
       for(i=1;i<end_line;i++)line = " ";
      }
      
     {
       line[NR] = $0;
       while( (getline < rf ) > 0)
       {
               line_num = $0;
               break;
        }
        print line_num " " line[NR];
        next ;
      }
END{close(rf);  exit 1; }


其中, ${FILE}.randout  就是利用樓上程序產(chǎn)生的一個(gè)隨機(jī)排序列
必須有這個(gè)文件才可以還原成原來的文本了。。。。
可以找一個(gè)比較大的文本來轉(zhuǎn)換試試看。。。嘿嘿。。。。

        :emn4:          
作者: bjgirl    時(shí)間: 2003-11-12 14:40
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
精華~~~
作者: 光明曉仙    時(shí)間: 2003-11-12 14:46
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
高手,俺佩服,建議給sunkey 加倆精華..........
作者: admirer    時(shí)間: 2003-11-12 15:44
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
支持!
作者: sunkey    時(shí)間: 2003-11-12 16:50
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
[quote]原帖由 "光明曉仙"]高手,俺佩服,建議給sunkey 加倆精華..........[/quote 發(fā)表:


  哈。。。慚愧慚愧。。。其實(shí)都是跟這里學(xué)來的~~
  要不是經(jīng)常來這向大家學(xué)習(xí),我根本不知道啥是awk、sed說。。。。

                 
作者: CharlesWang2    時(shí)間: 2003-11-12 17:25
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
湊個(gè)熱鬧
用 Python 實(shí)現(xiàn):

  1. %tmp:cat test.dat
  2. 1 --- I
  3. 2 --- L
  4. 3 --- O
  5. 4 --- V
  6. 5 --- E
  7. 6 --- Y
  8. 7 --- O
  9. 8 --- U
  10. 9 --- !
  11. 10 --- !
  12. %tmp:cat test.dat | python r.py
  13. 6 --- Y
  14. 4 --- V
  15. 8 --- U
  16. 5 --- E
  17. 3 --- O
  18. 2 --- L
  19. 1 --- I
  20. 10 --- !
  21. 7 --- O
  22. 9 --- !
復(fù)制代碼

每次運(yùn)行的結(jié)果都不一樣。
源代碼

  1. import sys,random
  2. lines = sys.stdin.readlines()
  3. olines=[]
  4. while lines:
  5.    olines.append(lines.pop(random.randrange(len(lines))))
  6. sys.stdout.write( "".join(olines))
復(fù)制代碼

作者: sunkey    時(shí)間: 2003-11-12 18:09
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
[quote]原帖由 "CharlesWang2"][/quote 發(fā)表:


  Python 是啥東東??!! Linux的工具么?
作者: CharlesWang2    時(shí)間: 2003-11-13 10:16
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
python 是一種和 Perl , Java 很可比性的
一種語言。
作者: sunkey    時(shí)間: 2003-11-13 10:30
標(biāo)題: 讓文本文件的行內(nèi)容亂序儲(chǔ)存
原帖由 "CharlesWang2" 發(fā)表:
python 是一種和 Perl , Java 很可比性的
一種語言。


  汗阿。。。我這一個(gè)語言還沒玩轉(zhuǎn)呢。。。!   




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