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

使用awk将日期文件转换为unix时间,unix,awk,Unix,Awk,我有一个包含日期和纬度的文件,我想将UTC中的日期转换为unix时间。我决定在awk脚本中使用unix date函数来实现这一点。我试过: 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/脚本新手,不确定是否可以将awk变量嵌入awk行中的unix命令中 当我运

我有一个包含日期和纬度的文件,我想将UTC中的日期转换为unix时间。我决定在awk脚本中使用unix date函数来实现这一点。我试过:

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/脚本新手,不确定是否可以将awk变量嵌入awk行中的unix命令中

当我运行脚本时,会出现以下错误:

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
的选项吗?你以后会感谢自己的(例如,见)

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

您不想打印命令c,您想打印执行命令的结果,如
getline
读取,但当您使用无方向
getline
时,它会覆盖$0、$1等。因此,您应该将结果保存在一个var中(请参阅)

你可能想要这样的东西:

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

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

您上面的示例给出了我想要的结果-这样的逻辑更有意义。将研究安装gawk。谢谢