免费注册 查看新帖 |

Chinaunix

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

[文本处理] 练习题(排序合并) [复制链接]

论坛徽章:
1
CU十四周年纪念徽章
日期:2015-12-16 18:25:16
11 [报告]
发表于 2014-01-16 16:11 |只看该作者
改了下可以了[code]
sed 's/[a-z ]*/& /' 1.txt|sort -k1,1 -k2,2 -k3,3n|awk '{
  a[NR]=$1FS$2$3
}
END{
  for (i=1;i<=NR;i++) {
    split(a[i],b,FS)
    if (!c[b[1]])
      c[b[1]]=b[2]","
    else {
      count=split(c[b[1]],d,",")
      match(d[count-1],/a-z+/)
      old1=substr(d[count-1],RSTART,RLENGTH)
      match(b[2],/a-z+/)
      new1=substr(b[2],RSTART,RLENGTH)
      match(d[count-1],/[0-9]+$/)
      old2=substr(d[count-1],RSTART,RLENGTH)
      match(b[2],/[0-9]+/)
      new2=substr(b[2],RSTART,RLENGTH)      
      if (old1==new1 && (old2+1)==new2||old2==new2) {
        c[b[1]]=substr(c[b[1]],1,length(c[b[1]])-1)
        sub(/-[0-9]+$/,"",c[b[1]])
        c[b[1]]=c[b[1]]"-"new2","
      }   
      else
        c[b[1]]=c[b[1]]""b[2]","
    }  
  }  
  for (i in c)
    print i":"substr(c[i],1,length(c[i])-1)
}'
[/code]

论坛徽章:
1
辰龙
日期:2014-01-22 21:48:03
12 [报告]
发表于 2014-01-16 16:40 |只看该作者
学习。。学习

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2014-01-16 16:54 |只看该作者
  1. # -*- coding:utf-8 -*-
  2. #filepath=D:\file
  3. import re
  4. l=[]
  5. d={}
  6. joinlist=[]
  7. T=""
  8. def ch2int(value):
  9.     return int(re.search("\d+",value).group())
  10. f=open(r"D:\file")
  11. lines=f.readlines()
  12. for line in lines:
  13.     if not d:
  14.         l.append(line.split()[1])
  15.         d[line.split()[0]]=l
  16.         l=[]
  17.     else:
  18.         if d.has_key(line.split()[0]):
  19.             d[line.split()[0]].append(line.split()[1])
  20.         else:
  21.             l.append(line.split()[1])
  22.             d[line.split()[0]]=l
  23.             l=[]
  24. for i in d:
  25.     x=sorted(d[i],key=ch2int)
  26.     for j in range(len(x)-1):
  27.         m=re.search("\d+",x[j]).group()
  28.         n=re.search("\D+",x[j]).group()
  29.         if x[j+1]==n+str(int(m)+1):
  30.             if x[j] not in joinlist:
  31.                 joinlist.append(x[j])
  32.             joinlist.append(x[j+1])
  33.             continue
  34.         if not joinlist:
  35.             if not T:
  36.                 T=x[j]+","
  37.             else:
  38.                 T=T+x[j]+","
  39.         else:
  40.             T=T+joinlist[0]+"-"+joinlist[-1]+","
  41.             joinlist=[]
  42.     print i+":"+T+x[-1]
  43.     T=""
复制代码
感觉python排序有点蛋疼,再研究下

论坛徽章:
2
巨蟹座
日期:2013-12-07 16:51:13天秤座
日期:2013-12-11 15:12:14
14 [报告]
发表于 2014-01-16 17:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
15 [报告]
发表于 2014-01-16 17:27 |只看该作者
回复 14# lxzkenney
你这结果就更达不到要求了{:2_169:}
   

论坛徽章:
1
辰龙
日期:2014-01-22 21:48:03
16 [报告]
发表于 2014-01-16 17:39 |只看该作者
我不太理解  m=gensub(/([^0-9]+).*/,"\\1",1,$2)  这个语句 能解释下吗 楼主?

讲模式匹配到的 后向引用 给第一个  但是$2是做什么呢?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
17 [报告]
发表于 2014-01-16 17:47 |只看该作者
回复 16# liyunxiang12

它的作用就是截取第二列的非数字部分

   

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
18 [报告]
发表于 2014-01-16 19:27 |只看该作者
我回复下能看到答案么? 懒得动了

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
19 [报告]
发表于 2014-01-16 21:23 |只看该作者
本帖最后由 yinyuemi 于 2014-01-16 21:29 编辑

回复 1# yestreenstars
  1. awk '{match($2,/([^0-9]+)([0-9]+)/,a);b[$1][a[1]][a[2]]=a[2]}END{for(i in b){printf i":\t";for(j=1;j<=asorti(b[i],c);j++){printf j==1?"":",";for(k=1;k<=(l=asort(b[i][c[j]],d));k++){if(d[k]==d[k+1]-1){printf d[k-1]!=d[k]-1?c[j]d[k]"-":""}else{printf k==1?c[j]d[k]",":(d[k-1]==d[k]-1?d[k]:c[j]d[k])(k!=l?",":"")}}};print ""}}' file
  2. apple:  cat12,cat106-109,cat123,cat125
  3. pear:   dog11,dog101,dog103-105mouse106-109,mouse123,mouse125

复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
20 [报告]
发表于 2014-01-16 21:24 |只看该作者
gawk 4.0                    
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP