【发布时间】:2015-11-24 06:01:57
【问题描述】:
我有一个格式的日志文件
RESPONSE1: Sat Aug 29 07:25:06 EDT 2015: oltp: response | {"status":"success"}|123457 | CCT | 6
RESPONSE1: Sat Aug 29 07:25:07 EDT 2015: oltp: response | {"status":"fail"}|123437 | CCT |
每个字段都是用竖线分隔的,我需要在两个时间戳之间找到某个 KPI。
我的做法是先把 UnixTime 中的 Timestamp 转换成 UnixTime,然后用它来比较。当我这样做时,我的 awk 命令会变得很慢
我正在使用这种方式。我的目标只是这样做
- 从第一列中选择日期,将其转换为纪元日期
- 将纪元与第 5 列一起打印
但这运行速度很慢。
awk -F "|" '$5>0 {print $1"|"$5}' ${logfilename} | sed -e "s/RESPONSE1: //g" -e "s/: oltp:/|/g" | awk -F "|" '{t=$1;"date -d \""t"\" +%s" | getline d; close("date -d \""t"\" +%s"); print d,$2}'
这里的任何帮助都可以使这更快。每个日志文件都非常大,我需要对至少 5 到 6 个日志文件执行此操作,因此速度非常慢
如果方法正确,请告诉我。
【问题讨论】:
-
不,方法是错误的。根据您发布的示例输入,编辑您的问题以包含预期的输出,并告诉我们您是否拥有或可以安装 GNU awk(运行
awk --version),以便我们为您提供帮助。
标签: performance unix awk epoch