Shell 使用系统日期命令使用awk变量进行数据转换

Shell 使用系统日期命令使用awk变量进行数据转换,shell,awk,Shell,Awk,日志文件如下所示: 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:

日志文件如下所示:

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变量运行,并给出错误,因此没有结果):

版本2(这不是预期的工作,但给我一个额外的行,并在其中添加一个“0”,即系统执行代码):


非常感谢您的帮助。

awk
不在字符串中展开变量,请使用串联。当命令只产生一行输出时,也不需要使用

"date -d " $1 "+%Y/%m/%d" | getline ddd;
$1 = ddd;
print $0;

谢谢Barmar的快速回复。我在理解如何使用你的例子时遇到了一些困难,因为我遇到了一些错误。日期:额外操作数
2014+%Y/%m/%d'请尝试
date--help'以了解更多信息。
awk '
    BEGIN { FS = "," }
    {   
    $1 = system("date -d \"$1\" +%Y/%m/%d")
    print $0
    }
  ' _SOURCE_FILE
"date -d " $1 "+%Y/%m/%d" | getline ddd;
$1 = ddd;
print $0;