免费注册 查看新帖 |

Chinaunix

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

[文本处理] 练习题(键值循环替换) [复制链接]

论坛徽章:
1
巳蛇
日期:2014-04-17 12:33:24
21 [报告]
发表于 2014-04-14 18:42 |只看该作者
先占个坑,回头再填

论坛徽章:
1
巳蛇
日期:2014-04-17 12:33:24
22 [报告]
发表于 2014-04-14 20:27 |只看该作者
  1. awk 'NR==FNR{gsub(/;/,"");a[$1]=$3;next} NR!=FNR{do{k=0;for(i in a)if(gsub(i,a[i],$3))k++;}while(k)print;}' sample sample
复制代码

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
23 [报告]
发表于 2014-04-15 07:03 |只看该作者
小明,对就是小明,不小心把原文件删了,怎么用处理结果得到原文件呢?

论坛徽章:
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
24 [报告]
发表于 2014-04-15 08:55 |只看该作者
回复 23# r2007

逆操作貌似不太现实?
   

论坛徽章:
0
25 [报告]
发表于 2014-04-15 09:56 |只看该作者
本帖最后由 yaozhibing41001 于 2014-04-15 10:57 编辑

回复 2# reyleon

看我大python另一路办法
  1. #! /usr/bin/python
  2. with open(r'C:\Users\Administrator\Desktop\python\d\a.lst','r') as file:
  3.     _A_dict=dict(x.replace('\n','').replace(';','').split(' = ') for x in file.readlines())
  4. for x,y in _A_dict.iteritems():
  5.     a=0
  6.     while a<len(_A_dict[x].split('_')):
  7.         z=_A_dict[x].split('_')
  8.         for bb in z :
  9.             if bb not in _A_dict:
  10.                 a+=1
  11.             else:
  12.                 _A_dict[x]=_A_dict[x].replace(bb,_A_dict[bb])
  13.                 a=0
  14.     print x,'=',_A_dict[x]
复制代码
  1. ABC = D0_A0_D0_A0_C0_B0_C0
  2. ABD = C0_B0_C0
  3. A1 = D0_A0
  4. B1 = D0_A0_C0_B0_C0
  5. C1 = C0
  6. D1 = B0_C0
复制代码

论坛徽章:
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
26 [报告]
发表于 2014-04-15 10:47 |只看该作者
回复 25# yaozhibing41001


      你的蟒蛇比我的长的漂亮

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
27 [报告]
发表于 2014-04-15 12:15 |只看该作者
blackold 发表于 2014-04-14 16:10
Can use sed?quote from @rdcwayx:


OMG. V5

论坛徽章:
0
28 [报告]
发表于 2014-04-15 18:05 |只看该作者
awk 'BEGIN{FS="[ =;]"}{a[NR]=$1;b[NR]=$4;}END{for(i=1;i<=NR;i++){do{k=0;for(j=1;j<=NR;j++){k+=gsub(a[j],b[j],b[i]);}}while(k>0)}for(i=1;i<=NR;i++){printf "%s = %s;\n" a[1],b[1]}}' sample.file

论坛徽章:
0
29 [报告]
发表于 2014-04-16 17:04 |只看该作者
大婶们玩一样啊

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-14 12:20:38
30 [报告]
发表于 2014-04-16 23:28 |只看该作者
我也来凑个热闹
  1. awk -F= 'function f(a,k,v){n=0;split(v,b,"_");
  2.           for(i in b){s=b[i];if(a[s])n+=gsub(s,a[s],v)}if(n)f(a,k,v);else print k"="v}
  3.           {a[$1]=$2}END{for(i in a) f(a,i,a[i])}'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP