Как преобразовать шаблон в несколько имен полей - PullRequest
1 голос
/ 26 сентября 2019

Как можно сопоставить сопоставленный шаблон с несколькими именами полей?

Можно ли дважды проанализировать и назначить сопоставленный шаблон с помощью Grok?

Пример минимального, полного и проверяемого

Возьмите эту строку журнала:

09/26/2019 Кейт Миклас

Примените фильтр Грока:

%{DATE:date}\s*%{WORD:first_name}\s*%{WORD:last_name}

Это дает:

{
  "date": [
    [
      "09/26/2019"
    ]
  ],
  "first_name": [
    [
      "Keith"
    ]
  ],
  "last_name": [
    [
      "Miklas"
    ]
  ]
}

Мне нужен фильтр Грока примерно так:

%{DATE:date}\s*%{WORD:first_name,fn}\s*%{WORD:last_name,ln}
%{DATE:date}\s*%{WORD:first_name&fn}\s*%{WORD:last_name&ln}
%{DATE:date}\s*%{WORD:first_name|fn}\s*%{WORD:last_name|ln}

Результат:

{
  "date": [
    [
      "09/26/2019"
    ]
  ],
  "first_name": [
    [
      "Keith"
    ]
  ],
  "fn": [
    [
      "Keith"
    ]
  ],
  "last_name": [
    [
      "Miklas"
    ]
  ],
  "ln": [
    [
      "Miklas"
    ]
  ]
}

1 Ответ

1 голос
/ 26 сентября 2019

Вы можете заключить нужные вам части в именованные группы захвата:

%{DATE:date}\s*(?<fn>%{WORD:first_name})\s*(?<ln>%{WORD:last_name})
               ^^^^^^                  ^   ^^^^^^                 ^

Вывод:

{
  "date": [
    [
      "09/26/2019"
    ]
  ],
  "fn": [
    [
      "Keith"
    ]
  ],
  "first_name": [
    [
      "Keith"
    ]
  ],
  "ln": [
    [
      "Miklas"
    ]
  ],
  "last_name": [
    [
      "Miklas"
    ]
  ]
}
...