使用awk将日期文件转换为unix时间

Converting a file of dates into unix time with awk

我有一个包含日期和lat long的文件,我想将UTC中的日期转换为Unix时间。我决定在awk脚本中使用unix日期函数来完成这项工作。我尝试过:

1
awk 'BEGIN {t=$3; c="date -j -f %Y%j%H%M%S"t" +%s"; c|getline; close( c ); print $1, $2, c; }' test.txt

其中,t是我的文件中的第三行,格式为2014182120311。我不熟悉awk/scripting,不确定是否可以将awk变量嵌入到awk行中的unix命令中。

当我运行脚本时,我得到错误:

1
2
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
        [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]

所以我认为我没有正确地定义"T"。非常感谢您的帮助!

另一方面,我尝试过mktime和其他awk时间函数,但它们对我不起作用,我相信,因为我没有gawk。


您没有安装gawk的选项吗?你以后会感谢你自己的。

在打开任何文件之前执行BEGIN节,因此$3(从当前文件读取的当前记录的第3个字段)在该节中没有意义,因此t=$3只将变量t设置为空字符串。

您不想打印命令,c,您想打印执行命令的结果,正如getline所读取的那样,但是当您使用无向getline时,它会覆盖$0,$1等,所以您应该将结果保存到var中(参见http://awk.info/?提示/获取行)。

你可能想要这样的东西:

1
2
3
4
5
6
7
awk '{
    cmd ="date -j -f %Y%j%H%M%S" $3" +%s"
    if ( (cmd | getline time) > 0 ) {
        print $1, $2, time
    }
    close(cmd)
}' test.txt

但如果没有,请发布一些示例输入和预期输出,这样我们可以帮助您。