免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: mcwolf2000
打印 上一主题 下一主题

[文本处理] 快过节了,来点技术小红包,awk/sed程序方面 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
11 [报告]
发表于 2017-01-15 11:53 |只看该作者
2.同事提出实际使用中最好能进行字段控制,这样题目比较完整。
  比如用一个文本文件或者常量数组的字段列表 fieldlist=("port","portEnable","MediaType"........):
   一是文本文件中没有出现fieldlist中的字段,该字段取null;
   二是文本文件中超出fieldlist范围的字段,忽略本字段。
根据这些规则,具体的输出结果啥样?能否在1楼贴出来瞧瞧。

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2016-07-06 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:00
12 [报告]
发表于 2017-01-15 12:05 |只看该作者
回复 2# haooooaaa

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
13 [报告]
发表于 2017-01-15 12:54 |只看该作者
本帖最后由 sunzhiguolu 于 2017-01-15 12:59 编辑
$ wc -l urFile
850000 urFile

PlayPlay@PlayPlay-PC /tmp/test
$ time -p grep -oP '(DownTime|RecentUpTime)\s*:.*|(\S+\s*:\s*\S*)' urFile|sed -r '/Params|Status/d;s/\bId/port/;s/Enable|Class/port&/;s/:/ & /'|awk -F'\\s*:\\s*' '!f{a=a?a","$1:$1;b=b?b","($2?$2:"NULL"):($2?$2:"NULL");if(/RecentUpTime/)f=1}f&&!p{print a RS b;p=1;next}p{printf ($2?$2:"NULL") (/RecentUpTime/?RS:",")}'>rst
real 8.98
user 8.73
sys 0.12

PlayPlay@PlayPlay-PC /tmp/test   
$ time -p awk -F: '{gsub(" *: *",":");sub("^ *","");$0=gensub("(:[^ ]+) *([^ ]+:)","\\1:\\2","g",$0);$1=$1}/^Id/{a[$2];b=$2;next}!/^Params|^Status|^ *$/{for(i=1;i<=NF/2;i++){key[$(i*2-1)];all[b,$(i*2-1)]=$(i*2)?$(i*2):"NULL"}}END{s="port";for(i in key)s=s","i;l=split(s,t,",");print s;for(i in a){s=i;for(j=2;j<=l;j++)s=s ","all[i,t[j]];print s}}' urFile>rst
real 9.07
user 9.00
sys 0.03

你测试的数据实在是太少了。。。

有同事提出能用 lex/yacc 搞定是对实践使用一种很有吸引力的方案
有多快? 3秒内?

评分

参与人数 1信誉积分 +20 收起 理由
mcwolf2000 + 20 赞一个!

查看全部评分

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
14 [报告]
发表于 2017-01-15 13:58 来自手机 |只看该作者
很好,改天我也搞一个这样活动

评分

参与人数 1信誉积分 +5 收起 理由
mcwolf2000 + 5 是啊,微信红包太弱智了,怎么展现咱IT男的.

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
15 [报告]
发表于 2017-01-15 20:18 |只看该作者
port   nofield  PortEnable     MediaType      Duplex   speed   class       Link           Duplex     speed             RecentUpTime        
1       null      enable           1000BaseT      auto      auto     802.3     down          half         10Mbps            0 years   0 days...
1       null      enable           100BaseT        auto      auto     802.3     down          half         100Mbps          0 years   0 days...
你这个 PortEnable 的值怎么弄出来的,我真是有点醉了。能不能好好玩。。。

论坛徽章:
0
16 [报告]
发表于 2017-01-16 09:35 |只看该作者
回复 15# sunzhiguolu

不好意思,笔误。不过应该不太影响理解吧,主要也是举个例子......


论坛徽章:
0
17 [报告]
发表于 2017-01-16 09:42 |只看该作者
很好的方式,能够多种角度解决问题,然后评估,便于在不同环境下选择方案有参考价值!

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
18 [报告]
发表于 2017-01-16 10:34 |只看该作者
回复 16# mcwolf2000
port   nofield  PortEnable     MediaType      Duplex   speed   class       Link           Duplex     speed             RecentUpTime        
1       null      enable           1000BaseT      auto      auto     802.3     down          half         10Mbps            0 years   0 days...
1       null      enable           100BaseT        auto      auto     802.3     down          half         100Mbps          0 years   0 days...
port 字段的缺省值为 1?


论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
19 [报告]
发表于 2017-01-16 10:52 |只看该作者
回复 16# mcwolf2000
port   nofield  PortEnable     MediaType      Duplex   speed   class       Link           Duplex     speed             RecentUpTime        
1       null      enable           1000BaseT      auto      auto     802.3     down          half         10Mbps            0 years   0 days...
1       null      enable           100BaseT        auto      auto     802.3     down          half         100Mbps          0 years   0 days...

另外,对于输出结果你希望如何进行控制。能否给予一个说明。


论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
20 [报告]
发表于 2017-01-16 12:44 |只看该作者
本帖最后由 sunzhiguolu 于 2017-01-16 12:45 编辑
Class,Duplex,Duplex,Link,MediaType,NoField,Port,PortEnable,RecentUpTime,Speed,Speed
802.3,auto,half,down,1000BaseT,NULL,NULL,NULL,0 years 0 days 0 hours 0 minutes 0 seconds,auto,10Mbps
802.3,auto,half,down,1000BaseT,NULL,NULL,NULL,0 years 0 days 0 hours 0 minutes 0 seconds,auto,10Mbps

这种结果是否符合要求?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP