找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 128|回复: 6

[求助] python如何根据关键字取值的不同,提取关键字前几行和后.....

2

主题

8

帖子

8

积分

贫民

积分
8
glider2019 发表于 2019-7-5 18:42:35 | 显示全部楼层 |阅读模式
大家好!

正在做一个日志分析的工作,这个日志以SA为关键字,有17640行。
例子中SA在文件的第6行,第2列。
SA取值有三种情况,SA=0 SA=1 SA=2。根据SA取值的不同,需要提取这个关键字之前和之后的数据的位置也不同。
如果SA=0,我需要提取第0行第0列的值NAME,
如果SA=1,我需要提取第0行第0列的值NAME ,第三行第3列第4列的值,第16行第0列和第1列的值
如果SA=2,我需要提取第0行第0列的值NAME ,第三行第3列第4列的值,第16行第0列和第1列的值, 还有第25行第0列和第1列的值

请问如何实现?谢谢!

with open('/root/temp/v1/vpn-1', "r") as f:
    content = f.readlines()
    print(type(content))
    print(len(content))
    print(type(content[0]))
    print(content[0])
    print(content[6])
    print(content[0].split())
    vpnname = content[0].split()[0]
    rxb = content[3].split()[3]
    txb = content[3].split()[4]
    dec = content[16].split()[0]
    enc = content[16].split()[1]
    print(content[6].split()[2])
    satype = content[6].split()[2]
    if satype == 'sa=1':
        print(vpnname, rxb, txb, dec, enc)
    if satype == 'sa=2':
        print(vpname, rxb, txb, sa1-dec, sa1-enc, sa2-dec, sa2-enc)

输出:
<class 'list'>
17640
<class 'str'>
name=n10.196.19.166 ver=2 serial=3d2 172.28.85.60:0->10.196.19.166:0

proxyid=n10.196.19.166 proto=0 sa=1 ref=2 serial=1

['name=n10.196.19.166', 'ver=2', 'serial=3d2', '172.28.85.60:0->10.196.19.166:0']
sa=1
name=n10.196.19.166 rxb=16604 txb=22508 dec:pkts/bytes=0/0, enc:pkts/bytes=25/3400
回复

使用道具 举报

0

主题

485

帖子

485

积分

骑士

积分
485
sheeboard 发表于 2019-7-5 19:25:43 | 显示全部楼层
给个测试文本。
回复 支持 反对

使用道具 举报

2

主题

8

帖子

8

积分

贫民

积分
8
glider2019  楼主| 发表于 2019-7-6 07:42:32 | 显示全部楼层
more vpn-1
name=n10.196.19.166 ver=2 serial=3d2 172.28.85.60:0->10.196.19.166:0
bound_if=55 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=14 ilast=3 olast=3 auto-discovery=0
stat: rxp=331 txp=331 rxb=16604 txb=22508
dpd: mode=on-idle on=1 idle=15000ms retry=5 count=0 seqno=69297
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=n10.196.19.166 proto=0 sa=1 ref=2 serial=1
  src: 0:0.0.0.0/0.0.0.0:0
  dst: 0:0.0.0.0/0.0.0.0:0
  SA:  ref=6 options=2e type=00 soft=0 mtu=1934 expire=3601/0B replaywin=2048
       seqno=1a esn=0 replaywin_lastseq=00000000 itn=0
  life: type=01 bytes=0/0 timeout=10776/10800
  dec: spi=6c0f0292 esp=aes key=16 116838068d7017d4382225da117f9e11
       ah=sha1 key=20 a223e8a9b33dfefecbc322038ae8a9d64591fbac
  enc: spi=c8133af4 esp=aes key=16 c68f61548081e186eb2a0376e2f268d5
       ah=sha1 key=20 7435069e3407301e87511b517db2b8bfe301b46a
  dec:pkts/bytes=0/0, enc:pkts/bytes=25/3400
  npu_flag=03 npu_rgwy=10.196.19.166 npu_lgwy=172.28.85.60 npu_selid=160 dec_npuid=1 enc_npuid=2
name=n10.196.19.194 ver=2 serial=3d3 172.28.85.60:0->10.196.19.194:0
bound_if=55 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=12 ilast=30 olast=30 auto-discovery=0
stat: rxp=33 txp=3423 rxb=1704 txb=461216
dpd: mode=on-idle on=0 idle=15000ms retry=5 count=0 seqno=8566
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=n10.196.19.194 proto=0 sa=0 ref=1 serial=1
  src: 0:0.0.0.0/0.0.0.0:0
  dst: 0:0.0.0.0/0.0.0.0:0
name=n10.196.19.158 ver=2 serial=3d0 172.28.85.60:0->10.196.19.158:0
bound_if=55 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=19 ilast=1 olast=1 auto-discovery=0
stat: rxp=153 txp=1662 rxb=7704 txb=210924
dpd: mode=on-idle on=1 idle=15000ms retry=5 count=0 seqno=69771
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=n10.196.19.158 proto=0 sa=2 ref=3 serial=1
  src: 0:0.0.0.0/0.0.0.0:0
  dst: 0:0.0.0.0/0.0.0.0:0
  SA:  ref=6 options=2e type=00 soft=0 mtu=1934 expire=7739/0B replaywin=2048
       seqno=59 esn=0 replaywin_lastseq=00000000 itn=0
  life: type=01 bytes=0/0 timeout=10775/10800
  dec: spi=6c0f5665 esp=aes key=16 50c7cd312c212cfca365293ceda965cf
       ah=sha1 key=20 1848ff9302f046dce1dec99ef89abbd27738df26
  enc: spi=c4a173fb esp=aes key=16 675f868000a3151189f17adcbe187f12
       ah=sha1 key=20 224897adf78dfca4be13ff7da657e3ba3b82f742
  dec:pkts/bytes=0/0, enc:pkts/bytes=88/11968
  npu_flag=03 npu_rgwy=10.196.19.158 npu_lgwy=172.28.85.60 npu_selid=15e dec_npuid=1 enc_npuid=1
  SA:  ref=4 options=2e type=00 soft=0 mtu=1934 expire=7721/0B replaywin=2048
       seqno=401 esn=0 replaywin_lastseq=00000000 itn=0
  life: type=01 bytes=0/0 timeout=10775/10800
  dec: spi=6c0f55cd esp=aes key=16 f659c76678a43e9030a3c911a7552668
       ah=sha1 key=20 fcbdea6ea2ea67fdcc476b8d6fadd23ba149c660
  enc: spi=c044030e esp=aes key=16 764f18624ff71f6e504209ad41ed50ca
       ah=sha1 key=20 1fe0e7a4e1b548883d633bf6ada7350191a25f69
  dec:pkts/bytes=0/0, enc:pkts/bytes=0/0
  npu_flag=02 npu_rgwy=10.196.19.158 npu_lgwy=172.28.85.60 npu_selid=15e dec_npuid=1 enc_npuid=1
name=n10.196.19.198 ver=2 serial=3d4 172.28.85.60:0->10.196.19.198:0
bound_if=55 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=14 ilast=13 olast=13 auto-discovery=0
stat: rxp=183 txp=3419 rxb=9204 txb=493580
dpd: mode=on-idle on=1 idle=15000ms retry=5 count=0 seqno=69119
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=n10.196.19.198 proto=0 sa=2 ref=3 serial=1
  src: 0:0.0.0.0/0.0.0.0:0
  dst: 0:0.0.0.0/0.0.0.0:0
  SA:  ref=6 options=2e type=00 soft=0 mtu=1934 expire=3728/0B replaywin=2048
       seqno=19 esn=0 replaywin_lastseq=00000000 itn=0
  life: type=01 bytes=0/0 timeout=10778/10800
  dec: spi=6c0f050c esp=aes key=16 2acb820d65cb71dd75abe0661b8b7c69
       ah=sha1 key=20 bb8aaabcd2d4aeb58a87f2c218a4e112c69693f1
  enc: spi=c6101e07 esp=aes key=16 9118e00bec8e44f56370165aad85daa5
       ah=sha1 key=20 2a45a7ad54f86225d896fb1c3d5dad0fc3b2f1f9
  dec:pkts/bytes=0/0, enc:pkts/bytes=24/3264
  npu_flag=03 npu_rgwy=10.196.19.198 npu_lgwy=172.28.85.60 npu_selid=162 dec_npuid=1 enc_npuid=1
  SA:  ref=4 options=2e type=00 soft=0 mtu=1934 expire=3714/0B replaywin=2048
       seqno=401 esn=0 replaywin_lastseq=00000000 itn=0
  life: type=01 bytes=0/0 timeout=10774/10800
  dec: spi=6c0f0504 esp=aes key=16 10e932ba289c76cefdff818a867c1a80
       ah=sha1 key=20 229fcb14c5587ffc977611b39b4c72030feed3cc
  enc: spi=c4b939e8 esp=aes key=16 133b0446511bd4ed495cefd8d713162c
       ah=sha1 key=20 87fcc0b38e03f38827c869881fc3a292bb9a3aae
  dec:pkts/bytes=0/0, enc:pkts/bytes=0/0
  npu_flag=02 npu_rgwy=10.196.19.198 npu_lgwy=172.28.85.60 npu_selid=162 dec_npuid=1 enc_npuid=1
name=h10.117.100.101 ver=1 serial=db 172.28.85.60:0->10.117.100.101:0
bound_if=55 lgwy=static/1 tun=intf/0 mode=auto/1 encap=none/8 options[0008]=npu
proxyid_num=1 child_num=0 refcnt=98 ilast=0 olast=0 auto-discovery=0
stat: rxp=844286108 txp=3550746788 rxb=244678835383 txb=1316785823553
dpd: mode=on-idle on=1 idle=15000ms retry=5 count=0 seqno=0
natt: mode=none draft=0 interval=0 remote_port=0
proxyid=h10.117.100.101 proto=0 sa=1 ref=39 serial=1
  src: 0:0.0.0.0/0.0.0.0:0
  dst: 0:0.0.0.0/0.0.0.0:0
  SA:  ref=6 options=2e type=00 soft=0 mtu=1934 expire=3116/0B replaywin=2048
       seqno=75f801 esn=0 replaywin_lastseq=004d33c0 itn=0
  life: type=01 bytes=0/0 timeout=7173/7200
  dec: spi=6c0f420a esp=aes key=16 1a9d4d8360133c63b8e4a7b81d177cbc
       ah=sha1 key=20 5b2ede3e379d062b11df72394bbfd88575de3a8d
  enc: spi=0de8d699 esp=aes key=16 623a6887ab9288ae0cde6107e9124df0
       ah=sha1 key=20 8babcd16cdf9cc983a946324c7acbf9a550e7b82
  dec:pkts/bytes=5059520/1198538686, enc:pkts/bytes=7758044/9847479310
  npu_flag=03 npu_rgwy=10.117.100.101 npu_lgwy=172.28.85.60 npu_selid=1 dec_npuid=2 enc_npuid=2
回复 支持 反对

使用道具 举报

2

主题

8

帖子

8

积分

贫民

积分
8
glider2019  楼主| 发表于 2019-7-6 07:55:30 | 显示全部楼层
谢谢!
提交了一个简单的文本,包含了SA的不同类型,正在等待审核
回复 支持 反对

使用道具 举报

2

主题

8

帖子

8

积分

贫民

积分
8
glider2019  楼主| 发表于 2019-7-6 08:02:45 | 显示全部楼层
这个是3%的日志文件,包含了SA的三种类型
如果SA=0,那么只提取name就可以了
如果SA=1,那么除了name以外,还要提取rx tx,以及一组dec sec
如果SA=2,除了name以外,还要提取rx tx,还要提取两组dec sec

谢谢!

vpn-1.txt

44.28 KB, 下载次数: 2

日志文件

回复 支持 反对

使用道具 举报

0

主题

5

帖子

5

积分

贫民

积分
5
子南 发表于 2019-7-6 18:35:29 | 显示全部楼层
根据获得的字符串再进行匹配就行,用正则 demo.py (1.21 KB, 下载次数: 5)
回复 支持 反对

使用道具 举报

2

主题

8

帖子

8

积分

贫民

积分
8
glider2019  楼主| 发表于 2019-7-7 09:54:29 | 显示全部楼层
子南 发表于 2019-7-6 18:35
根据获得的字符串再进行匹配就行,用正则

十分感谢! 拿到了我需要的数据。我将提取里面的数字做下一步的操作。谢谢!
sa= 1
name=n10.196.19.166 ver=2
rxb=16604 txb=22508
dec:pkts/bytes=0/0, enc:pkts/bytes=25/3400

============================================================

sa= 0
name=n10.196.19.194
stat: rxp=33 txp=3423 rxb=1704 txb=461216

============================================================

sa= 2
name=n10.196.19.158 ver=2
rxb=7704 txb=210924
dec:pkts/bytes=0/0, enc:pkts/bytes=88/11968
dec:pkts/bytes=0/0, enc:pkts/bytes=0/0

============================================================
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表