免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Shell 求助
12下一页
最近访问板块 发新帖
查看: 2344 | 回复: 10

[文本处理] 求助 [复制链接]

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
发表于 2015-07-28 17:59 |显示全部楼层
本帖最后由 drakness 于 2015-07-28 18:01 编辑

求助个问题,我有一段数据,格式是这样的:
  1. 45SD123SD123TP_X_ACTRow-X (SX)ad45SD123SD123FK_T_ASTRow-X (SX)wd45SD123SD123TI_TY_ACTRow-X (SX)wd
  2. 45SD123SD123TOT_ACTOSRow-X (SX)ad45SD123SD123TL_QT_ATCTRow-X (SX)wd45SD123SD123TP_T_ACTRow-X (SX)wd
  3. 45SD123SD123TP_T_ACTRow-X (SX)ad45SD123SD123TP_T_ACTRow-X (SX)wd45SD123SD123
复制代码
怎么能得到
  1. TP_X_ACT  FK_T_AST  TI_TY_ACT
  2. TOT_ACTOS  TL_QT_ATCT  TP_T_ACT
  3. TP_T_ACT  TP_T_ACT  TP_T_ACT
复制代码

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
发表于 2015-07-28 18:01 |显示全部楼层
自己写的太麻烦,期待简便的方法

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2015-07-28 18:18 |显示全部楼层
drakness 发表于 2015-07-28 18:01
自己写的太麻烦,


贴上来看看

论坛徽章:
10
2015年亚洲杯之科威特
日期:2015-04-13 13:51:5315-16赛季CBA联赛之山东
日期:2016-01-16 18:35:0815-16赛季CBA联赛之广东
日期:2016-01-04 15:26:23程序设计版块每日发帖之星
日期:2015-11-13 06:20:002015亚冠之阿尔艾因
日期:2015-11-10 12:32:242015亚冠之阿尔沙巴布
日期:2015-05-15 18:26:49羊年新春福章
日期:2015-04-28 16:45:112015年亚洲杯之伊拉克
日期:2015-04-25 20:06:30羊年新春福章
日期:2015-04-13 13:53:2015-16赛季CBA联赛之八一
日期:2016-01-20 18:23:49
发表于 2015-07-28 18:31 |显示全部楼层
回复 3# MMMIX


    太笨了,使用perl 's///' 一点点删除的

论坛徽章:
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
发表于 2015-07-28 18:57 |显示全部楼层
回复 1# drakness

What You Want Is Want You Code(WYWIWYC)

$ cat FILE
45SD123SD123TP_X_ACTRow-X (SX)ad45SD123SD123FK_T_ASTRow-X (SX)wd45SD123SD123TI_TY_ACTRow-X (SX)wd
45SD123SD123TOT_ACTOSRow-X (SX)ad45SD123SD123TL_QT_ATCTRow-X (SX)wd45SD123SD123TP_T_ACTRow-X (SX)wd
45SD123SD123TP_T_ACTRow-X (SX)ad45SD123SD123TP_T_ACTRow-X (SX)wd45SD123SD123


$ perl -lane '{print join(" ",m/\d(\D+?)Row-X/g)}' FILE
TP_X_ACT FK_T_AST TI_TY_ACT
TOT_ACTOS TL_QT_ATCT TP_T_ACT
TP_T_ACT TP_T_ACT

   

评分

参与人数 1信誉积分 +10 收起 理由
substr函数 + 10 赞一个!

查看全部评分

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
发表于 2015-07-28 22:27 |显示全部楼层
  1. awk -F 'Row' '{for(i=1;i<NF;i++) {split($i,a,"");for(j=length(a);j>0;j--) {if(a[j]~/[0-9]/) {break} else {t=t a[j]}}split(t,b,"");for(k=length(b);k>0;k--) {printf b[k]};printf " ";t=""}print ""}' file
  2. TP_X_ACT FK_T_AST TI_TY_ACT
  3. TOT_ACTOS TL_QT_ATCT TP_T_ACT
  4. TP_T_ACT TP_T_ACT
复制代码
回复 1# drakness


   

论坛徽章:
0
发表于 2015-07-28 22:58 |显示全部楼层
方法比较笨,但是也可以实现你这个例子sed 's/Row/123/g' a.txt | awk -F '123' '{print $3"\t"$6"\t"$9}'

论坛徽章:
768
金牛座
日期: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
发表于 2015-07-28 23:16 |显示全部楼层
本帖最后由 Herowinter 于 2015-07-28 23:18 编辑

回复 1# drakness

针对你的文本,理论上这样就可以得到你想要的结果。
最后一行第3列是按前两列补上的?

grep -Po "[_A-Z]*(?=Row-X)" urfile|xargs -n3
   

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
发表于 2015-07-28 23:26 |显示全部楼层
回复 1# drakness
  1. $awk '{s=$0;while(match(s,/[0-9]([^0-9]+)Row-X/,a)>0){printf a[1]" ";s=substr(s,a[1,"start"]+a[1,"length"])}print ""}' file
  2. TP_X_ACT FK_T_AST TI_TY_ACT
  3. TOT_ACTOS TL_QT_ATCT TP_T_ACT
  4. TP_T_ACT TP_T_ACT
复制代码

论坛徽章:
0
发表于 2015-07-29 10:04 |显示全部楼层
awk -F'123SD123' '{print $2,$3,$4}' a.txt | awk -F 'Row-X' '{print $1,$2,$3}' |awk '{print $1,$3,$5}'
TP_X_ACT FK_T_AST TI_TY_ACT
TOT_ACTOS TL_QT_ATCT TP_T_ACT
TP_T_ACT TP_T_ACT
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP