TextFSM - Как сопоставить отдельные строки, которые относятся друг к другу? - PullRequest
0 голосов
/ 28 марта 2020

Я не совсем уверен, как сформулировать свой вопрос, поэтому я приложу все усилия, чтобы продемонстрировать пример.

Возьмите эти данные

      -------------------------------------------------
        Port 0/1, port index, 4 devices total, 3 online
      -------------------------------------------------

      ID        Info            Last Seen

      -------------------------------------------------

      0         111         1m 3s ago
      1         222         never seen
      2         333         30s ago
      14        444         2m 12s ago

      -------------------------------------------------

      ID        Type            Distance

      -------------------------------------------------

      0         aaa         322m
      1         bbb         -
      2         ccc         932m
      14        ddd         194m
      -------------------------------------------------

      -------------------------------------------------
        Port 0/2, port index, 4 devices total, 4 online
      -------------------------------------------------

      ID        Info            Last Seen

      -------------------------------------------------

      23        555         3m 2s ago
      24        666         23m 4s ago
      51        777         23s ago
      52        888         14m 22s ago

      -------------------------------------------------

      ID        Type            Distance

      -------------------------------------------------

      23        eeee            23m
      24        ffff            -
      51        gggg            442m
      52        hhhh            167m
      -------------------------------------------------

Я не уверен, как соответствовать 2 таблицы, которые появляются под каждым портом при возврате его как отдельной записи в анализаторе textfsm. Самое большее, что у меня есть, - это получить последнюю запись (888 и ччхх) с этим шаблоном:

Value Filldown PORT (\d+\/\d+)
Value Required ID (\d+)
Value INFO (\w+)
Value LAST_SEEN (.*)
Value TYPE (\w+)
Value DISTANCE (\S+)

Start
  ^\s+Port\s+${PORT}.* -> Record
  ^\s+ID.*Last\s+Seen -> Table1

Table1
  ^\s+${ID}\s+${INFO}\s+${LAST_SEEN}
  ^\s+ID.*Distance -> Table2

Table2
  ^\s+${ID}\s+${TYPE}\s+${DISTANCE}
  ^\s+-+
  ^\s+Port\s+${PORT} -> Start

Данные, которые я получаю:

[
    {
        "DISTANCE": "167m",
        "ID": "52",
        "INFO": "888",
        "LAST_SEEN": "14m 22s ago",
        "PORT": "0/2",
        "TYPE": "hhhh"
    }
]

Я пытался изменить Несколько вещей, но я не могу понять, где мне следует искать, чтобы обеспечить запись каждой записи ...

Если бы кто-то мог указать мне правильное направление, я был бы чрезвычайно благодарен.

...