unix 时间日期并使用 awk 在 bash 中替换

unix time to date and replace in bash using awk

我正在尝试将 unix 时间转换为日期和时间;

1436876820 blah1 stop none john
1436876820 blah0 continu none john
1436876821 blah2 stop good bob

我想将第一列转换为另外两列日期和时间,如下所示

14-07-15 13:27:00 blah1 stop none john
14-07-15 13:27:00 blah0 continu none john
14-07-15 13:27:01 blah2 stop good bob
etc..

所以我开始做以下事情。

IN=""

for i in $(awk '{print }' ${IN});
do

DD=$(date -d @${i} +'%d-%m-%Y %H:%M:%S')

awk '{ ="'"${DD}"'" }' < ${IN}


done

由于语法原因,这不起作用并给出这样的错误:

awk: { ="14-07-2015 13:27" }
awk:          ^ syntax error

我可以使用 sed 而不是 awk:

sed "s/^1........./${DD}/" ${IN}

非常欢迎任何有关 awk 的帮助。 阿尔.

摆脱 shell 循环,只执行一次 awk 调用:

awk '{
    cmd = "date -d @"  " +\"%d-%m-%Y %H:%M:%S\""
    if ( (cmd | getline dd) > 0 ) {
         = dd
    }
    close(cmd)
    print
}' ""

如果你有 GNU awk,你可以只使用它的内部 strftime() 而不是 date+getline:

awk '{
     = strftime("%d-%m-%Y %H:%M:%S",)
    print
}' ""