免费注册 查看新帖 |

Chinaunix

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

[文本处理] 为什么在awk里面循环不成功? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-29 20:00 |只看该作者 |倒序浏览
有如下数据,以英文逗号','分割:
P_SGSN_MOBILITY_MANAGEMENT SGS_PV_MOBMGMRA_RAC1_RAW,SGSN_GID,PAPU_INDEX PAPU_ID,MCC MCC_ID,MNC MNC_ID,LAC LAC_ID,RAC RAC_ID,PERIOD_START_TIME,PERIOD_DURATION,PAPU_GROUPID PAPU_GROUP,PAPU_PHYSICAL_INDEX PAPU_PHY,PAPU_CAPA PAPU_CAPA,PAPU_SWITCHOVER_MADE PAPU_SM,MAX_RT_PDP_CTX_USERS RTPDP_CAPA,MAX_ACT_RT_PDP_CTX_USERS ABL_RTPDP,MAX_BANDW_LMT_FOR_RT_PDP_CTXS BL_RTPDP,COMB_ATTACH_SUCC_IN_PS_SIDE,COMB_ATTACH_FAIL_PLMN_NA,COMB_ATTACH_FAIL_LA_NA,COMB_ATTACH_FAIL_ROAMING_NA,COMB_ATTACH_FAIL_PROT_ERROR,FAIL_CAMEL_SERVICE

其特点是某些Field可以按照空格再次分割出两个或者多个Field,例如PAPU_INDEX PAPU_ID。
要求是将这样的段取出来,我是这样实现的:

awk -F, 'BEGIN{i=1}{while( $i ~ / / && i <= NF ){print $i;++i}i=1;}'

但是不知道为何只能得到第一个Field,执行结果为:P_SGSN_MOBILITY_MANAGEMENT SGS_PV_MOBMGMRA_RAC1_RAW
后面的都不知道跑到哪里去了,请问怎么回事?

论坛徽章:
769
金牛座
日期: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
2 [报告]
发表于 2014-04-29 20:12 |只看该作者
回复 1# yqhzh
一般这么写的。
  1. awk -F, '{for(i=1;i<=NF;i++)if($i~/ /)print $i}' i
  2. P_SGSN_MOBILITY_MANAGEMENT SGS_PV_MOBMGMRA_RAC1_RAW
  3. PAPU_INDEX PAPU_ID
  4. MCC MCC_ID
  5. MNC MNC_ID
  6. LAC LAC_ID
  7. RAC RAC_ID
  8. PAPU_GROUPID PAPU_GROUP
  9. PAPU_PHYSICAL_INDEX PAPU_PHY
  10. PAPU_CAPA PAPU_CAPA
  11. PAPU_SWITCHOVER_MADE PAPU_SM
  12. MAX_RT_PDP_CTX_USERS RTPDP_CAPA
  13. MAX_ACT_RT_PDP_CTX_USERS ABL_RTPDP
  14. MAX_BANDW_LMT_FOR_RT_PDP_CTXS BL_RTPDP
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-04-29 20:28 |只看该作者
回复 2# Herowinter

确实,谢谢。不知道为何突然想那样写,还觉得语法没错,实在是贻笑大方

   

论坛徽章:
769
金牛座
日期: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
4 [报告]
发表于 2014-04-29 20:34 |只看该作者
回复 3# yqhzh
你的写法当做到$2时,因为 $2!~/  /,
就结束循环了,所以只执行1次。


   

论坛徽章:
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
5 [报告]
发表于 2014-04-30 00:14 |只看该作者
LS已经解释为什么不行了,来个简单的~
  1. grep -oE '[^,]+\s+[^,]+'
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP