2023-05-03 00:00:06.419 [http-nio-18114-exec-73] [2t6zjje8t8cqp4k] [INFO ] PaymentService [486] – payment notify orderNo=20230502234641KOKP5093984290, notifyObject={“horario”:”2023-05-02 23:47:10″,”taxId”:”069.660.363-23″,”valor”:30.00,”txid”:”E22896431202305030246KPVNRVN5FM9″,”remark”:”SUCCESS”,”source”:”webhook”,”endToEndId”:”E22896431202305030246KPVNRVN5FM9″,”status”:”paid”}
2023-05-03 00:00:14.425 [http-nio-18114-exec-63] [r9xyhexebddovyx] [INFO ] PaymentService [486] – payment notify orderNo=20230502235938KOKP6495035050 notifyObject={“horario”:”2023-05-03 00:00:12″,”taxId”:”110.335.015-30″,”valor”:20.00,”txid”:”E17192451202305030259DY5HBAXVX4D”,”remark”:”SUCCESS”,”source”:”webhook”,”endToEndId”:”E17192451202305030259DY5HBAXVX4D”,”status”:”paid”}
提取上面日志内容,返回如下内容
20230502234641KOKP5093984290,2023-05-03 00:00:06
20230502235938KOKP6495035050,2023-05-03 00:00:14
awk '{match($0, /orderNo=([0-9A-Za-z]+)/, orderNo); print orderNo[1] "," substr($0, 1, 19)}'
match($0, /orderNo=([0-9A-Za-z]+)/, orderNo)
:这一部分使用正则表达式匹配函数match
,从整行文本中匹配出订单号。正则表达式/orderNo=([0-9A-Za-z]+)/
匹配以”orderNo=”开头,后面跟着一个或多个数字或字母的字符串。match
函数的第一个参数$0
表示当前行的文本,第二个参数是正则表达式,第三个参数orderNo
是一个数组,用于存储匹配到的结果。通过orderNo[1]
可以获取匹配到的订单号。substr($0, 1, 19)
:这一部分使用substr
函数从当前行的文本中提取前19个字符的子串,表示时间戳。print orderNo[1] "," substr($0, 1, 19)
:最后,使用print
命令打印提取到的订单号和时间戳。orderNo[1]
表示订单号,substr($0, 1, 19)
表示前19个字符的时间戳。通过逗号,
将两个值连接起来。
这样,使用AWK命令解析日志文件时,会将每一行匹配到的订单号和前19个字符的时间戳打印出来。
如果日志文件如下:
2023-05-03 00:00:02.711 [http-nio-18113-exec-56] [65ggrx5lf46sxea] [INFO ] PaymentController [385] – params= {“amount”:10,”orderNo”:”56230503025303167140379172″,”merOrderNo”:”20230502235947BETC2929237063″,”createTime”:1683082787795,”sign”:”94a8ed38614a4a85e7927af05a166dde947ae7bd03bff8526e4c601d1f49913c”,”orderStatus”:2,”currency”:”BRL”,”updateTime”:1683082802619,”attach”:”betcatpay”}
则可以用下面命令提取
awk -F 'merOrderNo":"' '{split($2, orderNo, "\""); print orderNo[1] "," substr($0, 1, 19)}'