在 bash awk 命令中格式化日期

问题描述 投票:0回答:1

我试图以某种格式获取某些日志的日期,以便之后进行一些比较,这是我的命令:

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")
以某种方式再次获取完整的日志消息?

bash date awk date-formatting
1个回答
0
投票

您可以尝试这个解决方案:

awk -F '[][]' '/expression/ {print $2}' logFile | 
date "+%Y.%j.%H.%M.%S" -f - |
sort -n

请注意,您不需要

grep
,因为
awk
也可以完成这项工作,当它在一行中找到文本
expression
时,仅打印那些列。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.