我有一个格式为
的日志文件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中转换时间戳,然后将其用于比较。当我这样做时,我的awk命令变得很慢
我正在使用这种方式。我的目标只是这样做
但这很慢。
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个日志文件上执行此操作,因此非常慢
如果方法正确,请告诉我。
答案 0 :(得分:1)
这是如何使用GNU awk高效打印epoch secs中的时间加上第5个字段的值:
$ cat tst.awk
BEGIN {
FS=" *[|] *"
for (i=1;i<=12;i++) {
m[substr("JanFebMarAprMayJunJulAugSepOctNovDec",(i-1)*3+1,3)] = i
}
}
{
split($1,t,/[ :]+/)
print mktime(t[9]" "m[t[3]]" "t[4]" "t[5]" "t[6]" "t[7]), $5
}
$ awk -f tst.awk file
1440851106 6
1440851107
但是您还没有向我们展示您正在尝试使用该信息,因此我们无法为您提供进一步的帮助。