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

  免費注冊 查看新帖 |

Chinaunix

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

問一個awk腳本寫法 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-08-11 21:27 |只看該作者 |倒序瀏覽
處理一個文本,如果某一行的文字是其它行的一部分,那么只保留這一行。比如:

abcd
abcdef
abcdefg
abcc

處理后結果為:
abcd
abcc

論壇徽章:
0
2 [報告]
發(fā)表于 2008-08-12 01:35 |只看該作者
  1. #!/bin/awk -f

  2. BEGIN{i=1}
  3. NR==1{a[i]=$0}
  4. NR>1{c=1;for(j=1;j<=i;j++)
  5.    {
  6.      if(a[j]~$0)
  7.        {
  8.         a[j]=$0;c=0;continue
  9.        }
  10.      else if($0~a[j])
  11.        {
  12.         c=0;break
  13.        }
  14.   }
  15. if(c!=0){i++;a[i]=$0;c=0}
  16. }
  17. END{for(i in a)print a[i]}
復制代碼


出來結果再濾一次重(continue那里可能會重行)

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
3 [報告]
發(fā)表于 2008-08-12 09:06 |只看該作者

回復 #1 curclew 的帖子

try:

  1. $ awk '{for ( i in a ) {if( i ~ $0) {delete a[i]; a[$0]=1} else if ($0 ~ i) f=1;} if(!f) a[$0]=1; else f=0;} END{for(i in a) print i}'  urfile
復制代碼


向ly5066113 學習next:

  1. awk '{for ( i in a ) {if( i ~ $0) {delete a[i]; a[$0]=1; next} else if ($0 ~ i) next} a[$0]=1} END{for(i in a) print i}' urfile
復制代碼


向 cjaizss  學習 index:
  1. awk ' {for ( i in a ) {if(index(i, $0)) {delete a[i]; a[$0]=1; next} else if (index($0,i)) next} a[$0]=1} END{for(i in a) print i}' urfile
復制代碼

[ 本帖最后由 blackold 于 2008-8-12 10:42 編輯 ]

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-08-03 06:20:00數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
4 [報告]
發(fā)表于 2008-08-12 09:07 |只看該作者

  1. #!/bin/awk -f
  2. BEGIN{x=0;}
  3. {
  4.         for(i=0;i<x;i++){
  5.                 if(!(i in a))
  6.                         continue;
  7.                 if(index($0,a[i])){
  8.                         next;
  9.                 } else if(index(a[i],$0)) {
  10.                         a[i]=$0;
  11.                         for(i++;i<x;i++)
  12.                                 if((i in a)&&index(a[i],$0))
  13.                                         delete a[i];
  14.                         next;
  15.                 }
  16.         }
  17.         a[x++]=$0
  18. }
  19. END{for(i in a)print a[i]}
復制代碼

雖然會很慢,但是可以得到正確的結果

論壇徽章:
23
15-16賽季CBA聯(lián)賽之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午馬
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16賽季CBA聯(lián)賽之山東
日期:2017-12-21 16:39:1915-16賽季CBA聯(lián)賽之廣東
日期:2016-01-19 13:33:372015亞冠之山東魯能
日期:2015-10-13 09:39:062015亞冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [報告]
發(fā)表于 2008-08-12 09:32 |只看該作者
原帖由 blackold 于 2008-8-12 09:06 發(fā)表
try:

$ awk 'NR==1{a[$0]=1} NR !=1{for ( i in a ) {if( i ~ $0) {delete a; a[$0]=1} else if ($0 !~ i) a[$0]=1}} END{for(i in a) print i}' urfile


思路差不多,呵呵。

  1. awk '{for(i in a){if(index(i,$0)==1){a[$0]++;delete a[i];next}else if(index($0,i)==1) next}a[$0]++}END{for(i in a) print i}' urfile
復制代碼

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
6 [報告]
發(fā)表于 2008-08-12 09:59 |只看該作者
原帖由 ly5066113 于 2008-8-12 09:32 發(fā)表


思路差不多,呵呵。

awk '{for(i in a){if(index(i,$0)==1){a[$0]++;delete a;next}else if(index($0,i)==1) next}a[$0]++}END{for(i in a) print i}' urfile




我的代碼有的問題,已經修改。awk還沒入門啊。

[ 本帖最后由 blackold 于 2008-8-12 10:01 編輯 ]

論壇徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-08-03 06:20:00數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-08-04 06:20:00
7 [報告]
發(fā)表于 2008-08-12 10:15 |只看該作者
建議用index函數(shù),而不是用regex匹配。
第一,regex匹配應該不是LZ想要的答案
第二,regex比較慢一點

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
8 [報告]
發(fā)表于 2008-08-12 10:19 |只看該作者
原帖由 cjaizss 于 2008-8-12 10:15 發(fā)表
建議用index函數(shù),而不是用regex匹配。
第一,regex匹配應該不是LZ想要的答案
第二,regex比較慢一點

有理,向cjaizss 學習!

論壇徽章:
0
9 [報告]
發(fā)表于 2008-08-12 10:49 |只看該作者
換個思路:

  1. sort 數(shù)據(jù)文件 | awk 'NR==1{print;a=$0;FS="(" a ")"}NR>1&& NF==1{a=a"|"$0;FS="("a")";print}'

  2. 如果文件中某些行可能存在特殊字符,那么上面的寫法就不適用了,可以嘗試下面的

  3. sort 數(shù)據(jù)文件 | awk 'NR==1{a[$0]=1;print $0}NR>1{has=0;for(i in a) has+=index($0,i);if(!has){a[$0]=1;print $0}}'
復制代碼


注:假設數(shù)據(jù)文件是不排序的,如果數(shù)據(jù)文件已經是排序的,就不需要用sort了

[ 本帖最后由 springwind426 于 2008-8-12 10:58 編輯 ]

論壇徽章:
5
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亞洲杯之朝鮮
日期:2015-03-13 22:47:33IT運維版塊每日發(fā)帖之星
日期:2016-01-09 06:20:00IT運維版塊每周發(fā)帖之星
日期:2016-03-07 16:27:44
10 [報告]
發(fā)表于 2008-08-12 11:09 |只看該作者
原帖由 springwind426 于 2008-8-12 10:49 發(fā)表
換個思路:

sort 數(shù)據(jù)文件 | awk 'NR==1{print;a=$0;FS="(" a ")"}NR>1&& NF==1{a=a"|"$0;FS="("a")";print}'

如果文件中某些行可能存在特殊字符,那么上面的寫法就不適用了,可以嘗試下面的

sort 數(shù)據(jù) ...

學習了。
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP