【发布时间】:2014-04-16 04:19:50
【问题描述】:
日志文件看起来像:
28 Feb 2014,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",STARTED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80
28 Feb 2014,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",TERMINATED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80
期望的输出:
2014/02/28,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",STARTED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80
2014/02/28,12:43:10,SAST,1821996800,10.144.22.91,494225040,"CONNECT",TERMINATED,0,0,0,10.144.22.91:59172,->,1.1.1.6:80
正在执行转换的 Shell 命令:
date -d "28 Feb 2014" +%Y/%m/%d
问题: 我如何使用 awk 进行这种转换(稍后我需要在不同时区之间进行转换,这就是为什么要使用 date 命令并且没有 sed 或其他方法来操作字符的原因) 目前尝试了几个选项,但都没有正常工作:
版本 1(由于某种原因,date 命令没有使用完整的 awk 变量运行,并给我错误,所以没有结果):
awk '
BEGIN { FS = "," }
{
while ("date -d $1 +%Y/%m/%d" | getline ddd) print ddd;
}
' _SOURCE_FILE
第 2 版(这不能按预期工作,但给我一个额外的行并在其中添加一个“0”,即系统执行代码):
awk '
BEGIN { FS = "," }
{
$1 = system("date -d \"$1\" +%Y/%m/%d")
print $0
}
' _SOURCE_FILE
帮助不胜感激。
【问题讨论】: