如何使用textfsm解析带有级联元素的CLI输出

问题描述

我正在尝试使用textfsm和python解析具有级联元素的CLI输出。这是一个示例:参考-https://github.com/google/textfsm/wiki/TextFSM

使用此示例。如何获取每个插槽的“ cpu利用率”值?

Routing Engine status:
  Slot 0:
    Current state                  Master
    Election priority              Master (default)
    Temperature                 39 degrees C / 102 degrees F
    cpu temperature             55 degrees C / 131 degrees F
    DRAM                      2048 MB
    Memory utilization          76 percent
    cpu utilization:
      User                      95 percent
      Background                 0 percent
      Kernel                     4 percent
      Interrupt                  1 percent
      Idle                       0 percent
    Model                          RE-4.0
    Serial ID                      xxxxxxxxxxxx
    Start time                     2008-04-10 20:32:25 PDT
    Uptime                         180 days,22 hours,45 minutes,20 seconds
    Load averages:                 1 minute   5 minute  15 minute
                                       0.96       1.03       1.03
Routing Engine status:
  Slot 1:
    Current state                  Backup
    Election priority              Backup
    Temperature                 30 degrees C / 86 degrees F
    cpu temperature             31 degrees C / 87 degrees F
    DRAM                      2048 MB
    Memory utilization          14 percent
    cpu utilization:
      User                       0 percent
      Background                 0 percent
      Kernel                     0 percent
      Interrupt                  1 percent
      Idle                      99 percent
    Model                          RE-4.0
    Serial ID                      xxxxxxxxxxxx
    Start time                     2008-01-22 07:32:10 PST
    Uptime                         260 days,10 hours,39 seconds

模板

Value required Slot (\d+)
Value State (\w+)
Value Temp (\d+)
Value cpuTemp (\d+)
Value DRAM (\d+)
Value User (\d+)
Value Background (\d+)
Value Kernel (\d+)
Value Interrupt (\d+)
Value Idle (\d+)
Value Model (\S+)


Start
  ^Routing Engine status: -> Record RESlot
  ^\s+cpu utilization: -> Record SUBRESlot

RESlot
  ^\s+Slot\s+${Slot}
  ^\s+Current state\s+${State}
  ^\s+Temperature\s+${Temp} degrees
  ^\s+cpu temperature\s+${cpuTemp} degrees
  ^\s+DRAM\s+${DRAM} MB
  ^\s+Model\s+${Model} -> Start

SUBRESlot
  ^\s+User\s+${User}\s+percent
  ^\s+backgroud\s+${Background}\s+percent
  ^\s+Kernel\s+${Kernel}\s+percent
  ^\s+Interrupt\s+${Interrupt}\s+percent
  ^\s+Idle\s+${Idle}\s+percent -> Start

输出

Slot,State,Temp,cpuTemp,DRAM,User,Background,Kernel,Interrupt,Idle,Model
0,Master,39,55,2048,RE-4.0
1,Backup,30,31,RE-4.0

您可以看到没有占用cpu利用率元素。

我真的很感谢任何指针

解决方法

我认为您的模板中有两个错误:

  1. 拥有所有数据后,您应该记录
  2. 要在RESlot状态的最后一行尝试匹配的 Model 值,只有在输入文本中通过了CPU利用率部分后,才能匹配。请注意,textfsm逐行分析文件。

您可以使用以下模板获取数据:

Value Required Slot (\d+)
Value State (\w+)
Value Temp (\d+)
Value CPUTemp (\d+)
Value DRAM (\d+)
Value User (\d+)
Value Background (\d+)
Value Kernel (\d+)
Value Interrupt (\d+)
Value Idle (\d+)
Value Model (\S+)


Start
  ^Routing Engine status: -> RESlot
  ^\s+CPU utilization: -> SUBRESlot


RESlot
  ^\s+Slot\s+${Slot}
  ^\s+Current state\s+${State}
  ^\s+Temperature\s+${Temp} degrees
  ^\s+CPU temperature\s+${CPUTemp} degrees
  ^\s+DRAM\s+${DRAM} MB -> Start
  

SUBRESlot
  ^\s+User\s+${User}\s+percent
  ^\s+Background\s+${Background}\s+percent
  ^\s+Kernel\s+${Kernel}\s+percent
  ^\s+Interrupt\s+${Interrupt}\s+percent
  ^\s+Idle\s+${Idle}\s+percent -> SUBModel
  
SUBModel
  ^\s+Model\s+${Model} -> Record Start

结果:

Slot,State,Temp,CPUTemp,DRAM,User,Background,Kernel,Interrupt,Idle,Model
0,Master,39,55,2048,95,4,1,RE-4.0
1,Backup,30,31,99,RE-4.0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...