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

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

Chinaunix

  平臺(tái) 論壇 博客 文庫
12
最近訪問板塊 發(fā)新帖
樓主: unixzhong
打印 上一主題 下一主題

awk 實(shí)現(xiàn) grep -A3 -B3 的效果,文本10G行 [復(fù)制鏈接]

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運(yùn)維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
11 [報(bào)告]
發(fā)表于 2011-03-23 18:06 |只看該作者
回復(fù) 10# unixzhong
  1. awk -f grepC.awk urfile
復(fù)制代碼
grepC.awk
  1. {
  2.     if (/B/) {
  3.         if (!f) {
  4.             if (p) {
  5.                 if ( mN && NR - lpN > 3) print "--";
  6.                 print p;
  7.                 p = "";
  8.             }
  9.             f = !f;
  10.         }
  11.         mN = NR;
  12.         print;
  13.         lpN = NR;
  14.     } else if (f) {
  15.         if (NR-mN > 3) {
  16.             f = !f;
  17.             if (gsub(/\n/,"\n",p) > 1) sub(/[^\n]*\n/,"",p);
  18.             p = p?p"\n"$0:$0;
  19.         } else {
  20.             print;
  21.             lpN = NR;
  22.         }
  23.     } else {
  24.         if (gsub(/\n/,"\n",p) > 1) sub(/[^\n]*\n/,"",p);
  25.         p = p?p"\n"$0:$0;
  26.     }
  27. }
復(fù)制代碼

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
12 [報(bào)告]
發(fā)表于 2011-03-24 01:53 |只看該作者
本帖最后由 yinyuemi 于 2011-03-26 01:23 編輯
回復(fù)  blackold

黑哥:

我的代碼已經(jīng)可以處理 重疊的情況了,就是想看看有沒有其他 思路,當(dāng)然我希望 ...
unixzhong 發(fā)表于 2011-03-23 15:39
  1. awk '{a[++p]=$0}

  2. /B/{p>f+3;print "-----"

  3.         f=p;

  4.         for(i=p-3;i<=p;i++)

  5.                 if((!(i in b))&&a[i]){print a[i];b[i]}

  6.     }

  7. NR==f+3&&f{

  8.         for(k=NR-2;k<=NR;k++)

  9.                 if((!(k in b))&&a[k]){print a[k];b[k]}

  10.              }'
復(fù)制代碼
這個(gè)應(yīng)該會(huì)快點(diǎn)

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運(yùn)維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
13 [報(bào)告]
發(fā)表于 2011-03-24 10:07 |只看該作者
剛才做了測試,grep快很多,有時(shí)間可以看看grep的源碼。

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
14 [報(bào)告]
發(fā)表于 2011-03-24 10:14 |只看該作者
剛才做了測試,grep快很多,有時(shí)間可以看看grep的源碼。
blackold 發(fā)表于 2011-03-24 10:07



    恩,我也測試了,
seq 1000000 |awk 'END{print}'

seq 1000000 | grep -A3 -B3 -w 5000
用的時(shí)間幾乎一樣

論壇徽章:
0
15 [報(bào)告]
發(fā)表于 2011-03-25 18:19 |只看該作者
本帖最后由 unixzhong 于 2011-03-25 18:48 編輯

回復(fù) 11# blackold


    快速掃描了下黑哥代碼,發(fā)現(xiàn)的確沒有用 a[NR]=$0
心里肯定了, 有不那么耗費(fèi)內(nèi)存的方式。
(  我一樓代碼里面  那種方式吃太多內(nèi)存 ----------------數(shù)組保存所有行)

再看了下 黑哥代碼,自己功力太淺,看的有點(diǎn)頭暈,因?yàn)闆]有 了解 黑哥的思路。

就暫時(shí)不敢回貼了。

后來就放一邊了, 看其他awk代碼去了,嘿嘿,從 tail -n 2 的awk實(shí)現(xiàn)例子里,得到了一點(diǎn)啟發(fā)。

于是 有了下面的  我的新實(shí)現(xiàn)了 (只需要一個(gè) 小 數(shù)組 臨時(shí) 保存 當(dāng)前行 和 它的前3行即可  )

經(jīng)過驗(yàn)證,才敢貼上來

man find | awk -f mygrep_atime_nodebug.awk  > mygrep_output

man find |  grep -A3 -B3  atime  > grep_output

diff mygrep_output  grep_output 沒輸出 :)
  1. BEGIN { Last_Range_End=0; Range_End=0;  for(i=0;i<=3;i++)keep[i]="" }


  2. {for(j=3;j>0;j--)keep[j]=keep[j-1];  keep[0]=$0}
  3. NR<=Range_End { print $0 }



  4. /atime/{ Last_Range_End=Range_End; Range_End= NR + 3;

  5.                 if (  Last_Range_End < NR )
  6.                          {
  7.                         non_intersect_lines=(4 - (NR - Last_Range_End) )>0? (NR - Last_Range_End) :4 ;
  8.                         if(non_intersect_lines==4) print "--" ;  
  9.                         for(i=non_intersect_lines-1;i>=0;i--) print keep[i]
  10.                         }
  11.           }
復(fù)制代碼
回家

論壇徽章:
0
16 [報(bào)告]
發(fā)表于 2011-03-25 18:27 |只看該作者
回復(fù) 14# yinyuemi


    謝謝  yinyuemi  一直以來的 熱心探討

     第一次知道 有 seq這個(gè)命令,

     能 就 如何 測量  腳本效率, 簡單地 說說嗎? 我還從來沒 這樣的經(jīng)歷, 多謝了。

論壇徽章:
2
射手座
日期:2014-10-10 15:59:4715-16賽季CBA聯(lián)賽之上海
日期:2016-03-03 10:27:14
17 [報(bào)告]
發(fā)表于 2011-03-26 01:28 |只看該作者
本帖最后由 yinyuemi 于 2011-03-26 12:18 編輯

回復(fù) 16# unixzhong


  這個(gè).... , 還是高手解答吧, 時(shí)間應(yīng)該算個(gè)很直觀的標(biāo)準(zhǔn)!

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運(yùn)維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運(yùn)維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
18 [報(bào)告]
發(fā)表于 2011-03-29 12:05 |只看該作者
回復(fù) 15# unixzhong


    你用經(jīng)典的數(shù)據(jù)來測試, 就發(fā)現(xiàn)和grep的輸出有差別了。

論壇徽章:
0
19 [報(bào)告]
發(fā)表于 2011-03-31 17:51 |只看該作者
回復(fù) 5# yinyuemi

經(jīng)!!

論壇徽章:
0
20 [報(bào)告]
發(fā)表于 2011-04-01 14:39 |只看該作者
既然是Awk就可以用Awk way, 扔給awk自己處理不知道會(huì)不會(huì)快一些:

  1. awk 'BEGIN{FS="\n"; RS=EOF} {代碼}'
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP