github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/md/grok.md (about)

     1  ### `grok()` {#fn-grok}
     2  
     3  函数原型:`fn grok(input: str, pattern: str, trim_space: bool = true) bool`
     4  
     5  函数说明:通过 `pattern` 提取文本串 `input` 中的内容,当 pattern 匹配 input 成功时返回 true 否则返回 false。
     6  
     7  参数:
     8  
     9  - `input`:待提取文本,可以是原始文本(`_`)或经过初次提取之后的某个 `key`
    10  - `pattern`: grok 表达式,表达式中支持指定 key 的数据类型:bool, float, int, string(对应 ppl 的 str,亦可写为 str),默认为 string
    11  - `trim_space`: 删除提取出的字符中的空白首尾字符,默认值为 true
    12  
    13  ```python
    14  grok(_, pattern)    # 直接使用输入的文本作为原始数据
    15  grok(key, pattern)  # 对之前已经提取出来的某个 key,做再次 grok
    16  ```
    17  
    18  示例:
    19  
    20  ```python
    21  # 待处理数据:"12/01/2021 21:13:14.123"
    22  
    23  # pipline 脚本
    24  add_pattern("_second", "(?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?)")
    25  add_pattern("_minute", "(?:[0-5][0-9])")
    26  add_pattern("_hour", "(?:2[0123]|[01]?[0-9])")
    27  add_pattern("time", "([^0-9]?)%{_hour:hour:string}:%{_minute:minute:int}(?::%{_second:second:float})([^0-9]?)")
    28  
    29  grok_match_ok = grok(_, "%{DATE_US:date} %{time}")
    30  
    31  add_key(grok_match_ok)
    32  
    33  # 处理结果
    34  {
    35    "date": "12/01/2021",
    36    "hour": "21",
    37    "message": "12/01/2021 21:13:14.123",
    38    "minute": 13,
    39    "second": 14.123
    40  }
    41  
    42  {
    43    "date": "12/01/2021",
    44    "grok_match_ok": true,
    45    "hour": "21",
    46    "message": "12/01/2021 21:13:14.123",
    47    "minute": 13,
    48    "second": 14.123,
    49    "status": "unknown",
    50    "time": 1665994187473917724
    51  }
    52  ```