免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell shell
12下一页
最近访问板块 发新帖
查看: 3058 | 回复: 14
打印 上一主题 下一主题

[文本处理] shell [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-06-09 15:13 |只看该作者 |倒序浏览
大家好,我有这样一个文件 如下:
1     49M1D52M
3     74M3I2D27M
6     13S14M2D74M
4     32M2D69M
7     8M1I17M2D75M
4     21M1D80M
5     17M1D72M12S

现在我想这样第一列照常输出,对于第二列,一般由nM,nI,nD,nS...组成, 现在我想将第二列nD前后除nD之外的其他数字加和。输出在第三列如下:
1     49M1D52M      49A1D52A
3     74M3I2D27M    77A2D27A
6     13S14M2D74M  27A2D74A
4     32M2D69M      32A2D69A
7     8M1I17M2D75M   26A2D75A
4     21M1D80M    21A1D80A
5     17M1D72M12S    17A1D89A

希望各路大神帮忙,不知道有没有描述清楚。 谢谢

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2015-06-09 15:38 |只看该作者
本帖最后由 jason680 于 2015-06-09 16:04 编辑

回复 1# biobaby

$ cat FILE
1     49M1D52M
3     74M3I2D27M
6     13S14M2D74M
4     32M2D69M
7     8M1I17M2D75M
4     21M1D80M
5     17M1D72M12S

$ awk 'function gn(s, t,n,r){t=split(s,x,"[A-Z]");for(n=1;n<=t;n++)r+=x[n];return(r"A")}{if(match($2,/^(.*[^D])([0-9]+D)(.+)/,a))print $1"\t"$2"\t" gn(a[1])a[2]gn(a[3])}' FILE
1        49M1D52M        49A1D52A
3        74M3I2D27M        77A2D27A
6        13S14M2D74M        27A2D74A
4        32M2D69M        32A2D69A
7        8M1I17M2D75M        26A2D75A
4        21M1D80M        21A1D80A
5        17M1D72M12S        17A1D84A

   

论坛徽章:
0
3 [报告]
发表于 2015-06-09 15:58 |只看该作者
谢谢 能够解决问题的。非常感谢。可是有点看不懂~~~请问可以帮忙解释一下吗?
回复 2# jason680


   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2015-06-09 16:02 |只看该作者
回复 3# biobaby

那不懂?

都不懂,请学基础...
awk初学之常见问题
http://bbs.chinaunix.net/thread-2309494-1-1.html

   

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
5 [报告]
发表于 2015-06-09 16:15 |只看该作者
回复 4# jason680


    jason680大神威武霸气。 有种恨铁不成钢的感觉~~

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
6 [报告]
发表于 2015-06-09 16:22 |只看该作者
本帖最后由 Herowinter 于 2015-06-09 16:24 编辑

回复 1# biobaby

没楼上的大神写的好.
  1. awk '{s1=s2=0;s=match($2,"[0-9]+D")-1;t=match($2,"D[0-9]")+1;split(substr($2,1,s),a,"[A-Z]");for(i in a)s1+=a[i];split(substr($2,t),a,"[A-Z]");for(i in a)s2+=a[i];print $1"\t"$2"\t"s1"A"substr($2,s+1,t-s-1)s2"A"}' i
  2. 1       49M1D52M        49A1D52A
  3. 3       74M3I2D27M      77A2D27A
  4. 6       13S14M2D74M     27A2D74A
  5. 4       32M2D69M        32A2D69A
  6. 7       8M1I17M2D75M    26A2D75A
  7. 4       21M1D80M        21A1D80A
  8. 5       17M1D72M12S     17A1D84A
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2015-06-09 16:25 |只看该作者
本帖最后由 jason680 于 2015-06-09 16:29 编辑

回复 5# reb00t

非也

病: 俺病,须医治...
医: 何症,详述之...

论坛徽章:
0
8 [报告]
发表于 2015-06-09 17:00 |只看该作者
好的 谢谢!
回复 4# jason680


   

论坛徽章:
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
9 [报告]
发表于 2015-06-09 17:43 |只看该作者
  1. # awk -vOFS='\t' '{t=$2;while(match(t,/([0-9]+)([^0-9]+)/,a)){if(a[2]!="D")s+=a[1];else{$3=s"A"a[0];s=0}sub(a[0],"",t)}$3=$3s"A";s=0}1' i
  2. 1       49M1D52M        49A1D52A
  3. 3       74M3I2D27M      77A2D27A
  4. 6       13S14M2D74M     27A2D74A
  5. 4       32M2D69M        32A2D69A
  6. 7       8M1I17M2D75M    26A2D75A
  7. 4       21M1D80M        21A1D80A
  8. 5       17M1D72M12S     17A1D84A
复制代码

论坛徽章:
771
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
10 [报告]
发表于 2015-06-09 18:26 |只看该作者
回复 9# yestreenstars
好久不见, 大神更加犀利了.

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP