免费注册 查看新帖 |

Chinaunix

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

[文本处理] 提取文本固定内容,并按要求输出 [复制链接]

论坛徽章:
1
2015亚冠之鹿岛鹿角
日期:2015-06-30 14:53:49
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-06 17:33 |只看该作者 |倒序浏览
本帖最后由 eatmyshort 于 2015-08-06 17:33 编辑

文本内容是:
[Map 1]
MapName=4139
AutoRun=1
InIP=
InPort=4139
OutIP=132.228.166.14
OutPort=4139
MaxUser=0
MaxIPUser=0
Proxy=0
BlackList=
[Map 2]
MapName=4138
AutoRun=1
InIP=
InPort=4138
OutIP=132.228.166.14
OutPort=4138
MaxUser=0
MaxIPUser=0
Proxy=0
BlackList=
[Map 3]
MapName=8289
AutoRun=0
InIP=
InPort=8289
OutIP=132.228.166.14
OutPort=8289
MaxUser=0
MaxIPUser=0
Proxy=0
BlackList=
[Map 4]
MapName=22555
AutoRun=1
InIP=
InPort=22555
OutIP=132.232.5.55
OutPort=22022
MaxUser=0
MaxIPUser=0
Proxy=0
BlackList=
=================================================================分割线
要求:提取每个Map内的InPort,OutIP,OutPort


最后输出格式如下
OutIP=132.232.5.55,InPort=22555,OutPort=22022
OutIP=132.229.165.202,InPort=6662,OutPort=8080
。。。。。。。
。。。。。。。
。。。。。。。

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
2 [报告]
发表于 2015-08-06 17:42 |只看该作者
  1. awk -vRS='\\[Map' 'NF{print $5","$6","$7}'
复制代码

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
3 [报告]
发表于 2015-08-06 18:00 |只看该作者
本帖最后由 tuyajie 于 2015-08-06 18:04 编辑
  1. awk 'BEGIN{RS="\n\\["}{for(i=1;i<=NF;i++){if($i~/OutPort/||$i~/InPort/||$i~/OutIP/)printf $i" "};printf"\n"}' test.txt | awk '{OFS=","; print $2,$1,$3}'
复制代码
改下

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
4 [报告]
发表于 2015-08-06 18:15 |只看该作者
本帖最后由 李满满 于 2015-08-06 18:15 编辑
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import re
  4. flag = ('InPort', 'OutIP', 'OutPort')
  5. fd = open('yhsafe.txt', 'rub')
  6. fl = fd.readlines()
  7. sectiondict = {}
  8. for line in fl:

  9.     match = re.search(r'^\[(.*)\]\s*', line)
  10.     if match:
  11.         match_gp = match.group(1)
  12.         sectiondict.setdefault(match_gp, [])
  13.     else:
  14.         sectiondict[match_gp].append(line)
  15. for key, val in sectiondict.iteritems():
  16.     print ','.join([s.strip() for s in val if s.split('=')[0] in flag ])
复制代码

Press ENTER or type command to continue
InPort=22555,OutIP=132.232.5.55,OutPort=22022
InPort=8289,OutIP=132.228.166.14,OutPort=8289
InPort=4138,OutIP=132.228.166.14,OutPort=4138
InPort=4139,OutIP=132.228.166.14,OutPort=4139

论坛徽章:
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
5 [报告]
发表于 2015-08-06 19:59 |只看该作者
回复 1# eatmyshort

$ awk '
BEGIN{
  FS= "=";
  OFS=",";
}
function v(k){
  return(k"="a[k]);
}
function p(){
  if(P)
    print v("OutIP"),v("InPort"),v("OutPort");
  delete a
}
match($0,/\[([^]]+)\]/,m){
  p();
  P=(m[1]~/^Map/)?1:0;
}
{
  a[$1]=$2;
}
END{
  p()
}' FILE
OutIP=132.228.166.14,InPort=4139,OutPort=4139
OutIP=132.228.166.14,InPort=4138,OutPort=4138
OutIP=132.228.166.14,InPort=8289,OutPort=8289
OutIP=132.232.5.55,InPort=22555,OutPort=22022

   

论坛徽章:
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
6 [报告]
发表于 2015-08-06 21:44 |只看该作者
回复 1# eatmyshort


    记录,然后打印:

  1. BEGIN {
  2.     OFS = ","
  3. }
  4. {
  5.     if (/Map\y/ && NR > 1) {
  6.         print a[0], a[1], a[2]
  7.         next
  8.     }

  9.     if (/OutIP/) {
  10.         a[0] = $0; next
  11.     }
  12.     if (/InPort/) {
  13.         a[1] = $0; next
  14.     }
  15.     if (/OutPort/) {
  16.         a[2] = $0; next
  17.     }
  18. }

  19. END {
  20.     print a[0], a[1], a[2]
  21. }
复制代码

论坛徽章:
1
2015亚冠之鹿岛鹿角
日期:2015-06-30 14:53:49
7 [报告]
发表于 2015-08-06 22:14 |只看该作者
赞赞赞,
李满满 发表于 2015-08-06 18:15
Press ENTER or type command to continue
InPort=22555,OutIP=132.232.5.55,OutPort=22022
InPort=828 ...

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2015-08-06 22:16 |只看该作者
回复 1# eatmyshort
  1. awk -vRS='(OutIP|OutPort|InPort)=[^\n]+' 'RT{printf RT (RT~/OutPort/?ORS:",")}'
复制代码

论坛徽章:
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-08-06 22:38 |只看该作者
本帖最后由 聆雨淋夜 于 2015-08-06 22:45 编辑
  1. awk -vRS='\\[Map [0-9]+\\]' 'NR>1{for(i=1;i<NF;i++)if($i~/InPort/)a=$i;else if($i~/OutIP/)b=$i;else if($i~/OutPort/)c=$i;print b",",a",",c}' file

  2. OutIP=132.228.166.14, InPort=4139, OutPort=4139
  3. OutIP=132.228.166.14, InPort=4138, OutPort=4138
  4. OutIP=132.228.166.14, InPort=8289, OutPort=8289
  5. OutIP=132.232.5.55, InPort=22555, OutPort=22022
复制代码
awk没有swith语句或者case语句啊

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2015-08-06 22:48 |只看该作者
回复 9# 聆雨淋夜


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP