问题描述
我正在尝试使用textfsm和python解析具有级联元素的CLI输出。这是一个示例:参考-https://github.com/google/textfsm/wiki/TextFSM
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利用率元素。
我真的很感谢任何指针
解决方法
我认为您的模板中有两个错误:
- 拥有所有数据后,您应该记录。
- 要在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