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

时间:2014-03-12 07:25:11

标签: 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: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或其他方法来操作chars) 现在尝试了几个选项但没有一个正常工作:

版本1(由于某种原因,日期命令不使用完整的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

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

awk不扩展字符串中的变量,使用连接。当命令只产生一行输出时,也不需要使用while

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