2017-10-19 77 views
-1

我試圖從光纖RFGW記錄光學讀數。我面臨的問題是,由於顯示數據的方式,我會在每次輸入後兩次捕獲物理接口和我想要追加的數據。我可以在收集信息後修復它,但是我想在解析輸出後避免太多的數據處理。TextFSM邏輯 - 避免兩次捕獲相同的數據

原始文本: HE-EQM-01#show interfaces transceiver detail | begin Transmit Power Transmit Power Threshold Threshold Threshold Threshold Port (dBm) (dBm) (dBm) (dBm) (dBm) --------- ----------------- ---------- --------- --------- --------- Te1/2 -3.0 1.6 -1.3 -7.3 -11.3 Te1/3 -17.3 1.6 -1.3 -7.3 -11.3 Te1/4 -40.0 1.6 -1.3 -7.3 -11.3 Te2/2 -3.1 1.6 -1.3 -7.3 -11.3 Te2/3 -40.0 1.6 -1.3 -7.3 -11.3 Te2/4 -40.0 1.6 -1.3 -7.3 -11.3 Optical High Alarm High Warn Low Warn Low Alarm Receive Power Threshold Threshold Threshold Threshold Port (dBm) (dBm) (dBm) (dBm) (dBm) ------- ----------------- ---------- --------- --------- --------- Te1/2 -40.0 1.9 -1.0 -9.9 -13.9 Te1/3 -2.6 1.9 -1.0 -9.9 -13.9 Te1/4 -2.9 1.9 -1.0 -9.9 -13.9 Te2/2 -3.0 1.9 -1.0 -9.9 -13.9 Te2/3 -2.6 1.9 -1.0 -9.9 -13.9

模板:

Value interface (\w+\d\/\d+) 
Value tx (-*\d+\.\d+) 
Value rx (-*\d+\.\d+) 

Start 
    ^\s*Transmit\s*Power.+ 
    ^\s*${interface}\s+${tx} -> Record 

輸出:

[['Te1/2', '-3.0', ''], 
['Te1/3', '-17.3', ''], 
['Te1/4', '-40.0', ''], 
['Te2/2', '-3.1', ''], 
['Te2/3', '-40.0', ''], 
['Te2/4', '-40.0', ''], 
['Te1/2', '-40.0', ''], 
['Te1/3', '-2.6', ''], 
['Te1/4', '-2.9', ''], 
['Te2/2', '-3.0', ''], 
['Te2/3', '-2.6', ''], 
['Te2/4', '-2.4', '']] 

優選:

[['Te1/2', '-3.0', '-40.0'], 
['Te1/3', '-17.3', '-2.6'], 
['Te1/4', '-40.0', '-2.9'], 
['Te2/2', '-3.1', '-3.0'], 
['Te2/3', '-40.0', '-2.6'], 
['Te2/4', '-40.0', '-2.4'], 

回答

0

我分解了一下。你想要的是:

  1. 匹配的接口:(\w+\d\/\d+)
  2. 幾個空格之後,匹配的發射功率:(-?\d\.\d+)(使用?最好這裏不想多以下-
  3. 再次在同一界面中查找下列文字:(?=.*\1)
  4. 隨後由接收功率(同2)一個

如果你組裝了這一切,你會得到:

(\w+\d+\/\d+)\s+(-?\d+\.\d+)(?=.+\1\s+(-?\d+\.\d+)) 
            ^
Capturing in the lookahead, that way relevant data is captured, but not eaten by the engine, which would prevent following matches. 

demo

相關問題