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 ```