Как извлечь набор повторяющихся данных, которые охватывают несколько строк в одно значение списка, используя TextFSM? - PullRequest
0 голосов
/ 07 января 2019

Я недавно начал с TextFSM для извлечения данных из полуформатированного текста. Извлеченные данные должны быть сопоставлены с одним из простых типов (например, строка), сложных типов (например, группа связанных элементов, таких как структура) или коллекции / список сложных типов.

Пример данных i / p: (Примечание: ввод может быть не всегда JSON)

{
    "cookie":"1539123566/5c904721-d477-17d4-9310-860a18d646cc",
    "response":"yes",
    "classId":"equipmentPsu",
    "outConfigs":[
     {
         "id":"1",
         "serial":"LIT193518YH",
         "thermal":"ok",
         "faultInst":[
         {
             "ack":"yes",
             "cause":"power-problem",
             "code":"F0883",
             "created":"2018-09-20T01:22:18",
             "descr":"***",
             "affectedDN":"sys/chassis-1/psu-1",
             "highestSeverity":"critical",
             "severity":"critical",
             "tags":"server",
         },
         {
              "ack":"yes",
              "cause":"equipment-inoperable",
              "code":"F0374",
              "created":"2018-09-20T01:22:17",
              "descr":"***",
              "affectedDN":"sys/chassis-1/psu-1",
              "severity":"major",
              "tags":"server",
         }
         ]
     },
     {
         "id":"2",
         "serial":"LIT193518Z0",
         "thermal":"ok",
         "faultInst":[
         {
              "ack":"yes",
              "cause":"equipment-inoperable",
              "code":"F0374",
              "created":"2018-09-20T01:22:17",
              "descr":"***",
              "severity":"major",
              "tags":"server",
         }
         ]
    }
    ]
}

Я заинтересован в извлечении serial и faultInst, который является списком сложного типа Fault

Fault {
    cause,
    code,
    severity
}

Используя приведенный ниже шаблон, я получил Cause, Code и Severity в виде отдельных списков:

Value Required,Filldown SerialNumber(\S+)
Value List FaultCause(\S+)
Value List FaultCode(\S+)
Value List FaultSeverity(\S+)

Start
  ^"serial":->Continue.Record
  ^"serial":"${SerialNumber}"
  ^"faultInst":\[->Fault

Fault
  ^"cause":"${FaultCause}"
  ^"code":"${FaultCode}"
  ^"severity":"${FaultSeverity}"->Fault
  ^\]->Start

Есть ли способ извлечь faultInst под каждым серийным номером, где каждый элемент в faultInst имеет тип Fault?

Пожалуйста, руководство.

...