免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 24596012 | 回复: 24596012
打印 上一主题 下一主题

[文本处理] 如何对文本的一个字段进行判断并进行修改使其上下统一 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-15 15:40 |只看该作者 |倒序浏览
例子:

张三,1981,....
李四,1981-1983,....
王武,[1984],....
李六,1984-,....
王大,,.....

每个字段用","分隔,都是统一的,但是在字段$2中,希望统一的格式是:

张三,1981,....

如果出现1981-1983.则"-1983"就要删除

如果出现[1984],也要变成1984.

1984-则只删除"-".

另外,每行中后面的字段也会出现1984-1996之类的,不对其进行变化.请问如何实现??谢谢.

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
2 [报告]
发表于 2014-12-15 15:54 |只看该作者

  1. sed -r 's/^([^,]+,)([^0-9]*)([0-9]{4,})([^,]*,)(.*)/\1\3\5/'
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-12-15 16:14 |只看该作者
本帖最后由 Looiml 于 2014-12-15 16:16 编辑

回复 1# casio1374633
  1. sed -r 's/,[^0-9]?([0-9]+)[^,]*/,\1/' urfile
复制代码

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
4 [报告]
发表于 2014-12-15 16:38 |只看该作者
  1. sed -r 's/^([^,]+,).+?([0-9]{4}).+?(,.*)/\1\2\3/' test
复制代码

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
5 [报告]
发表于 2014-12-15 16:51 |只看该作者
本帖最后由 关阴月飞 于 2014-12-15 16:56 编辑

回复 1# casio1374633
  1. awk -F, '{if(gsub(/[^0-9]/," ",$2))$2=+$2}9' OFS=,  urfile
复制代码

论坛徽章:
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
6 [报告]
发表于 2014-12-15 18:12 |只看该作者
回复 1# casio1374633

$ cat FILE
张三,1981,1981
李四,1981-1983,1981-1983
王武,[1984],[1984]
李六,1984-,9184-
王大,1988-1988,1988-1988

$ awk 'BEGIN{FS=OFS=","}{gsub(/^[^0-9]/,"",$2);$2+=0}1' FILE
张三,1981,1981
李四,1981,1981-1983
王武,1984,[1984]
李六,1984,9184-
王大,1988,1988-1988

论坛徽章:
5
戌狗
日期:2014-06-09 10:29:10酉鸡
日期:2014-12-01 16:05:27处女座
日期:2015-01-07 18:35:262015亚冠之水原三星
日期:2015-06-03 09:26:222015亚冠之布里斯班狮吼
日期:2015-06-15 10:53:54
7 [报告]
发表于 2015-01-04 17:55 |只看该作者
回复 5# 关阴月飞


    问一下,$2=+$2是怎么起作用的?以及楼上用的$2+=0?多谢!

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
8 [报告]
发表于 2015-01-04 19:55 |只看该作者
回复 7# kaede_1


    http://bbs.chinaunix.net/thread-2319120-1-1.html 第八题

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
9 [报告]
发表于 2015-01-05 10:10 |只看该作者
  1. awk -F, '{print gensub(/\[?([0-9]+)\]?-?([0-9]+)?/,"\\1",$2)}' file
  2. 张三,1981,....
  3. 李四,1981,....
  4. 王武,1984,....
  5. 李六,1984,....
  6. 王大,,.....
复制代码
前两天看到gensub函数的用法,用在这里挺好的

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
10 [报告]
发表于 2015-01-05 10:25 |只看该作者
回复 7# kaede_1
$2=+$2   <==>  $2=0+$2 <==>  $2=$2+0
会将$2从左到右的数字部分截取出来
jason680将“[1984]”的“[”替换为空,然后截取1984


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP