我试图在一个时间帧之间获取日志,我能够用下面的命令成功地完成它(虽然它给出了理想的结果)
file.log
2016年8月10日13时53分35秒org.apache.axis2.AxisFault:连接被拒绝
2016年8月10日13时53分36秒的东西等等等等等等
cat file.log\
| grep "refused" \
| awk -F, \
-v b='`date --date="10 minutes ago" +"%F %T"`' \
-v e='date +"%F %T"' \
-v date="$(date +"%F %T")" \
'{ if ($1 >= b && $1 <= e) print $0,date }'
Run Code Online (Sandbox Code Playgroud)
返回:2016-08-10 13:53:35 org.apache.axis2.AxisFault:连接被拒绝
但是,现在要捕获有关错误/异常的更多信息,我想在ERROR碰巧知道异常类型后再打印3-5行,
预计输出:
2016-08-10 13:53:35 org.apache.axis2.AxisFault:连接被拒绝
2016-08-10 13:53:36什么等等等等等等等等等
我正在使用:cat filename | grep -A 2"拒绝"| awk -F,-vb =' date --date="10 minutes ago" +"%F %T"' - ve =' date +"%F%T"'\ - v date ="$(date +"%F%T")"'{if($ 1> = b && $ 1 <= e)打印$ 0,日期}'
返回:
2016-08-10 13:53:35 org.apache.axis2.AxisFault:连接被拒绝
使用'-A 2'似乎对输出没有影响.有什么建议??
注意:如果我不使用awk,则以下命令可以正常工作,因为预期的cat filename | grep -A 3"ERROR"
尝试:
awk \
-F, \
-v b="$(date --date "10 mins ago" +"%F %T")"
-v e="$(date +"%F %T")" '
/ERROR|WARNING/ && ($1 " " $2)>=b && ($1 " " $2)<=e {print; cnt=5; next}
cnt>0 {print; --cnt}
' <filename
Run Code Online (Sandbox Code Playgroud)
笔记:
grep,每次找到匹配时,将计数器设置为5.-v var="$(date ...)"将由shell运行,看起来像那些-v var='<backtick>...<backtick>'将awk作为文字字符串传递,这不是你想要的.date在编辑OP后删除了额外的变量,因为我认为没有必要.$1和$2awk.在与bor 比较之前e,你需要将它们一起作为字符串,用空格分隔.