使用awk将日期文件转换为unix时间
我有一个包含日期和纬度的文件,我想将UTC中的日期转换为unix时间。我决定在awk脚本中使用unix date函数来实现这一点。我试过:使用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命令中 当我运
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。谢谢