我试图以某种格式获取某些日志的日期,以便之后进行一些比较,这是我的命令:
fgrep "<expression>" <logFile> | sort | awk -F "[][]" 'messageDate=$(date -d "$2" "+%Y.%j.%H.%M.%S") { print messageDate }'
我打印的是日志文件的整行。
如果我运行这个:
fgrep "<expression>" <logFiles> | sort | awk -F "[][]" 'messageDate=$(date -d "$2" "+%Y.%j.%H.%M.%S") { print $2 }'
我得到了日期,但不是我想要的格式。
2014-09-04T08:22:16Z
2017-10-08T16:05:06Z
2022-11-30T14:50:16Z
日志文件有这样的消息:
[2022-11-30T14:50:16Z] <Info/Warning/Error>: <log message>
有谁明白为什么 awk 正在工作,这意味着它正确地分割了文件,但代码
messageDate=$(date -d "$2" "+%Y.%j.%H.%M.%S")
以某种方式再次获取完整的日志消息?
您可以尝试这个解决方案:
awk -F '[][]' '/expression/ {print $2}' logFile |
date "+%Y.%j.%H.%M.%S" -f - |
sort -n
请注意,您不需要
grep
,因为 awk
也可以完成这项工作,当它在一行中找到文本 expression
时,仅打印那些列。