【发布时间】:2021-02-12 23:37:32
【问题描述】:
我的应用程序中有这个特定的日志
{"timestamp":"2020-10-30T20:30:29.722+08:00","status_category":"SUCCESS","status_name":"SUCCESS","delta":36,"sub_calls":[{"operation":"serviceDao.searchDealerByDealerCode","start":1604061029722,"stop":1604061029733,"delta":11},
{"timestamp":"2020-10-30T20:30:29.978+08:00","status_category":"SUCCESS","status_name":"SUCCESS","delta":44,"sub_calls":[{"operation":"serviceDao.searchDealerByDealerCode","start":1604061029978,"stop":1604061029979,"delta":1},
{"timestamp":"2020-10-30T20:30:30.327+08:00","status_category":"SUCCESS","status_name":"SUCCESS","delta":25,"sub_calls":[{"operation":"serviceDao.searchDealerByDealerCode","start":1604061030327,"stop":1604061030328,"delta":1},
{"timestamp":"2020-10-30T20:30:30.397+08:00","status_category":"SUCCESS","status_name":"SUCCESS","delta":51,"sub_calls":[{"operation":"serviceDao.searchDealerByDealerCode","start":1604061030397,"stop":1604061030398,"delta":1},
{"timestamp":"2020-10-30T20:30:30.531+08:00","status_category":"SUCCESS","status_name":"SUCCESS","delta":58,"sub_calls":[{"operation":"serviceDao.searchDealerByDealerCode","start":1604061030531,"stop":1604061030532,"delta":1},
{"timestamp":"2020-10-30T20:30:30.721+08:00","status_category":"SUCCESS","status_name":"SUCCESS","delta":45,"sub_calls":[{"operation":"serviceDao.searchDealerByDealerCode","start":1604061030721,"stop":1604061030722,"delta":1},
目的是提取前5分钟的日志,获取成功次数和失败次数 也许期望输出像
Success: 5
Failure : 5
我已经有了前 5 分钟的食谱
awk -v d1="$(date --date="-5 min" "+%Y-%m-%dT%H:%M:%S.%3N+08:00")" -v d2="$(date "+%Y-%m-%dT%H:%M:%S.%3N+08:00")" '$0 > d1 && $0 < d2 || $0 ~ d2' /infile/2020103020.jsn
但现在的挑战是我很难使用 grep 提取 json。
我什至尝试过
sed -E 's/\},\s*\{/\},\n\{/g' /infile/2020103020.jsn | grep '"timestamp":^C
grep -Po '"timestamp":"\K[^"]*' /infile/2020103020.jsn"
我需要一些启发
【问题讨论】:
-
您正在使用正则表达式来解析 JSON 数据,应该使用 JSON 解析器更好地处理。