我想使用gawk将unix时间戳转换为日期格式,使用strftime。
当我使用strftime一次时,我得到了预期的结果:
$ echo 1454310000 | gawk -F "," '{$s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); $e=$s; print ($s, $e);}'
2016-02-01 07:00:00 2016-02-01 07:00:00
但是当我多次使用strftime时,两个返回的结果都是完全错误的:
$ echo 1454310000 | gawk -F "," '{$s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); $e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print ($s, $e);}'
1970-01-01 00:33:36 1970-01-01 00:33:36
为什么会发生这种情况?如何更正它,以便我可以在同一输入上使用两次strftime?
答案 0 :(得分:1)
这里的问题是变量的使用。在awk
中,变量不会被引用美元。所以对var
说“是”并对 说不:$var
$ echo 1454310000 | gawk -F "," '{s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print (s, e);}'
2016-02-01 07:00:00 2016-02-01 07:00:00
发生了什么事?
由于s
和e
是未定义的变量,当您说$s=something()
时,您最终将something()
的输出分配到$
加上未定义变量值,默认为0
。并且$0
是整个记录,因此您分配了记录本身的值。
参见一个更简单的例子:
$ echo "hello" | awk '{$s="bu"; print}'
bu
答案 1 :(得分:0)
您不需要'$'符号来取消引用变量。试试这个:
echo 1454310000 | gawk -F "," '{s=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); e=strftime("%Y-%m-%d %H:%M:%S", ($1), 1); print (s, e);}'