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

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2344 | 回復(fù): 5
打印 上一主題 下一主題

Solaris下用nawk如何實(shí)現(xiàn)位運(yùn)算? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-02-24 20:58 |只看該作者 |倒序?yàn)g覽
5可用積分
用nawk (僅限于shell,請不要有用python,perl實(shí)現(xiàn)的回答),實(shí)現(xiàn)ACE中的一個(gè)hash算法,源代碼如下:
  1. u_long
  2. ACE::hash_pjw (const char *str, size_t len)
  3. {
  4.   u_long hash = 0;

  5.   for (size_t i = 0; i < len; i++)
  6.     {
  7.       const char temp = str[i];
  8.       hash = (hash << 4) + (temp * 13);

  9.       u_long g = hash & 0xf0000000;

  10.       if (g)
  11.         {
  12.           hash ^= (g >> 24);
  13.           hash ^= g;
  14.         }
  15.     }

  16.   return hash;
  17. }
復(fù)制代碼
以上我用shell已經(jīng)實(shí)現(xiàn),但效率實(shí)在太低,可能我水平有限,寫不出高效率的腳本,請達(dá)人賜教。
另外,我用gawk實(shí)現(xiàn)了這個(gè)腳本,效率大大提升,但移植到Solaris下,原生的awk和nawk不支持gawk的位運(yùn)算操作,請教達(dá)人如何用nawk實(shí)現(xiàn)呢?

shell的實(shí)現(xiàn):
  1. #!/bin/bash


  2. hash_pjw()
  3. {
  4.     hash=0
  5.     in="$1"
  6.     for (( i = 0; i < ${#in}; ++i ))
  7.     {
  8.         temp=`printf "%d" "'${in:i:1}"`
  9.         hash=$(( (hash<<4) + (temp*13) ))

  10.         g=$(( hash & 0xf0000000 ))
  11.         #echo temp[$temp]hash[$hash]g[$g]
  12.             
  13.         if [ -n "$g" ]; then
  14.             hash=$(( hash ^= (g >> 24) ))
  15.             hash=$(( hash ^= g ))      
  16.         fi
  17.     }
  18.     echo $hash
  19. }     

  20. hash_pjw "$1"
復(fù)制代碼
gawk的實(shí)現(xiàn):

  1. #!/bin/bash

  2. hash_pjw()
  3. {
  4.     echo "$1" | gawk 'BEGIN{}
  5.     function ord(c)
  6.     {
  7.         for( i=0;i<256;i++ ) {
  8.             ch = sprintf("%c",i);
  9.             assii[ch] = i;
  10.         }
  11.         return assii[c]
  12.     }

  13.     {
  14.         str=$0
  15.         for(j=1;j<=length(str);j++){
  16.             temp = ord( substr(str,j,1) )
  17.             hash = ( lshift(hash,4) + temp*13 )
  18.             g = and(hash,0xf0000000)
  19.             #print temp,hash,g

  20.             if(g){
  21.                 hash = xor(hash,rshift(g,24))
  22.                 hash = xor(hash,g)
  23.             }
  24.         }
  25.         print hash
  26.     }'
  27. }

  28. hash_pjw $1
復(fù)制代碼

論壇徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年紀(jì)念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役紀(jì)念章
日期:2022-04-24 14:33:24
2 [報(bào)告]
發(fā)表于 2012-02-25 09:29 |只看該作者
Solaris里面用/usr/xpg4/bin/awk可以嗎?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2012-02-25 11:54 |只看該作者
回復(fù) 2# Shell_HAT

不可以。也不支持。

   

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2012-02-28 13:43 |只看該作者
沒有大俠能指點(diǎn)一下嗎?  如果不用nawk,或者能用shell實(shí)現(xiàn)也行, Solaris下執(zhí)行500次,能夠控制在30秒之內(nèi)就可。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2013-06-27 09:29 |只看該作者
沒辦法,已轉(zhuǎn)為python實(shí)現(xiàn)

論壇徽章:
16
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運(yùn)維版塊每月發(fā)帖之星
日期:2015-09-11 19:30:52IT運(yùn)維版塊每周發(fā)帖之星
日期:2015-09-11 19:20:31IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-26 06:20:00每日論壇發(fā)貼之星
日期:2015-08-20 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-20 06:20:002015年辭舊歲徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09雙子座
日期:2013-12-17 16:44:37辰龍
日期:2013-11-22 15:20:59獅子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
6 [報(bào)告]
發(fā)表于 2013-06-27 10:43 |只看該作者
solaris上裝個(gè)GNU awk不就可以了嗎?
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP