免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: orctyr
打印 上一主题 下一主题

[awk]数据归类 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-04-01 09:22 |只看该作者
回复 10# 709101040516


    哈哈~一般高手都是单行的~我以前就经常写多行的。后来大拿们都是单行的,所以最近也练习单行呢~

论坛徽章:
0
12 [报告]
发表于 2010-04-01 09:26 |只看该作者

论坛徽章:
0
13 [报告]
发表于 2010-04-01 09:39 |只看该作者
回复 1# orctyr


    看不明白,强大

论坛徽章:
0
14 [报告]
发表于 2010-04-01 10:14 |只看该作者
回复 11# iori809


    囧···

论坛徽章:
0
15 [报告]
发表于 2010-04-01 10:16 |只看该作者
回复 14# 709101040516


    没事~你也会成为大拿的~只不过我们能不能等到那天就不好说了哈哈~写那种单行的需要对AWK十分熟悉,因为括号作用域啊,分号换行等细节,一点写不好就语法错误了
加油吧

论坛徽章:
0
16 [报告]
发表于 2010-04-01 11:25 |只看该作者

  1. awk '{line[$0]=1}
  2. END{
  3.         num=1
  4.         while (length(line)>0)
  5.         {
  6.                 for(i in line) break
  7.                 delete line[i]
  8.                 split(i,b)
  9.                 a[b[1]]=1
  10.                 a[b[2]]=1
  11.                 do
  12.                 {
  13.                         search=0
  14.                         for(i in line)
  15.                         {
  16.                                 split(i,b)
  17.                                 if (b[1] in a || b[2] in a)
  18.                                 {
  19.                                         delete line[i]
  20.                                         a[b[1]]=1
  21.                                         a[b[2]]=1
  22.                                         search=1
  23.                                 }
  24.                         }
  25.                 }while(search)
  26.                 for(i in a)
  27.                 {
  28.                         print num "\t" i
  29.                 }
  30.                 delete a
  31.                 num++
  32.         }
  33. }
  34. ' testfile.txt

复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
17 [报告]
发表于 2010-04-01 11:46 |只看该作者
本帖最后由 blackold 于 2010-04-01 12:13 编辑
  1. $ awk '{if(!($1 in a) && !($2 in a)) a[$1]=a[$2]=++p;else if(!(a[$1]*a[$2])) a[$1]=a[$2]=a[$1]+a[$2];print a[$1],$1;print a[$2],$2;}' urfile|sort -nuk 2|sort -n
复制代码
数据超大时可能超慢。

论坛徽章:
0
18 [报告]
发表于 2010-04-01 11:57 |只看该作者
回复 16# springwind426


    一看就是程序员出身呵呵

论坛徽章:
0
19 [报告]
发表于 2010-04-01 15:33 |只看该作者
数据超大时可能超慢。
blackold 发表于 2010-04-01 11:46


这个结果不对

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
20 [报告]
发表于 2010-04-01 15:49 |只看该作者
回复 19# springwind426


    哪里不对?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP