免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1504 | 回复: 9

[文本处理] 复杂字符类型文件处理 [复制链接]

论坛徽章:
0
发表于 2017-12-04 15:48 |显示全部楼层
本帖最后由 蓝色未央 于 2017-12-04 16:40 编辑

各位大神,求解一件比较棘手的问题,一个文件的第6列显示如下,现在我想进行处理的是每行第6列的数字加和是否等于第10列的字符串的长度(以字母作为分割):
例如第一行的结果是54+47=110,(有个例外,针对字母D,D前面的数字不列入计算范围)

希望用awk解决:大概就是cat file|awk 'length($10)==???'  (其中???就是代表第6列的数字的加和)

54M47S
74M27S
26S75M
26S75M
74M27S
22S79M
48M1D30M23S

渴求大神帮助,十分感谢


论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
发表于 2017-12-04 16:01 |显示全部楼层
看你发了 100 个多帖子了,咋还是不会问问题呢,你得 define 你口中 “数字加和” 到底是什么意思,否则大家只能猜了。

我猜 54M47S 的数字加和是 5 + 4 + 4 + 7 等于 20?

论坛徽章:
0
发表于 2017-12-04 16:06 |显示全部楼层
回复 2# ziyunfei

啊,这样啊,真抱歉,是我的过,混淆意思了;
想要实现的是以通过字母分割之后的数字的加和,也就是54+47

论坛徽章:
0
发表于 2017-12-04 16:08 |显示全部楼层
回复 2# ziyunfei

谢谢大神提出指正

论坛徽章:
0
发表于 2017-12-04 16:24 |显示全部楼层
  1. root@127:/tmp# cat a
  2. 54M47S
  3. 74M27S
  4. 26S75M
  5. 26S75M
  6. 74M27S
  7. 22S79M
  8. 48M1D30M23S
  9. root@127:/tmp# awk '{split($0,t,"[^0-9]");for(i in t)s+=t[i];print s;s=p}' a
  10. 101
  11. 101
  12. 101
  13. 101
  14. 101
  15. 101
  16. 102
复制代码

论坛徽章:
0
发表于 2017-12-04 16:39 |显示全部楼层
回复 5# nomethod

谢谢大神帮助,我消化一下,可否再一下您,如果我不想计算字母D前面的数字呢,应该加什么操作

论坛徽章:
0
发表于 2017-12-04 17:26 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2017-12-04 17:34 |显示全部楼层
  1. % awk -F'[A-Z]' '{sum=0;for(i=1;i<NF;i++){sum+=$i;}print sum}' ufile
  2. 101
  3. 101
  4. 101
  5. 101
  6. 101
  7. 101
  8. 102
复制代码

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2017-12-04 18:49 |显示全部楼层

  1. awk '{sub(/[0-9]+D/,"",$6);sum=0;for(i=1;i<=split($6,a,/[A-CE-Z]/);i++)sum+=a[i]}length($10)==sum'
复制代码

论坛徽章:
25
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之上海
日期:2018-12-11 09:45:3219周年集字徽章-年
日期:2020-04-18 23:54:5215-16赛季CBA联赛之深圳
日期:2020-04-19 21:40:19黑曼巴
日期:2022-04-03 17:55:1315-16赛季CBA联赛之八一
日期:2018-07-03 16:56:46
发表于 2017-12-04 19:11 |显示全部楼层
本帖最后由 wh7211 于 2017-12-04 19:13 编辑

回复 1# 蓝色未央


  1. cat 1
  2. 1 2 3 4 5 54M47S 7 8 9 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  3. 1 2 3 4 5 74M27S 7 8 9 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  4. 1 2 3 4 5 26S75M 7 8 9 aa
  5. 1 2 3 4 5 26S75M 7 8 9 aa
  6. 1 2 3 4 5 74M27S 7 8 9 aa
  7. 1 2 3 4 5 22S79M 7 8 9 aa
  8. 1 2 3 4 5 48M1D30M23S 7 8 9 aa

  9. awk '{y="([0-9]+)[^0-9]+([0-9]+)[^0-9]+$";match($6,y,t);a=length($10);if(t[1]+t[2]==a){print}}' 1
  10. 1 2 3 4 5 54M47S 7 8 9 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  11. 1 2 3 4 5 74M27S 7 8 9 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
复制代码

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP