通过awk命令"结果"作为变量到日期命令

时间:2014-09-15 16:38:49

标签: bash date awk

我有一个文件,其中包含以下两列:

"2014-07-22 17:45:00"   1406051695440
"2014-07-23 09:00:00"   1406138960913
"2014-07-23 09:00:00"   1406185159123
"2014-07-23 12:00:00"   1406142510435
"2014-07-24 10:23:00"   1406232985082
"2014-07-24 12:00:00"   1406206824292
"2014-07-24 13:30:00"   1406217480193
"2014-07-25 07:53:28"   1406275797916
"2014-07-29 10:30:00"   1406652173807
"2014-07-29 13:30:00"   1406659544903
"2014-07-30 09:00:00"   1406727826714
"2014-07-30 12:00:00"   1406745888737
"2014-07-30 12:59:27"   1406725794340
"2014-07-31 12:00:00"   1406829925055
"2014-07-31 13:30:00"   1406834428886
"2014-08-01 09:00:00"   1406897311292
"2014-08-04 09:33:06"   1407145793582
"2014-08-04 10:27:09"   1407149395816
"2014-08-05 13:30:00"   1407282683770
"2014-08-06 09:00:00"   1407344800476
"2014-08-06 12:00:00"   1407375490735
"2014-08-06 13:27:00"   1407371123661
"2014-08-07 12:00:00"   1407505272918
"2014-08-07 13:30:00"   1407870069228
"2014-08-08 08:58:00"   1407518580468
"2014-08-08 09:53:48"   1407492483505
"2014-08-20 07:10:00"   1408552070009
"2014-08-21 06:51:00"   1408604587871
"2014-08-21 07:33:00"   1408607299171
"2014-08-21 08:20:00"   1408693609065
"2014-08-21 12:00:00"   1408734166746
"2014-08-21 12:25:00"   1408972414360
"2014-08-21 13:30:00"   1408670893024
"2014-08-22 06:00:00"   1408725813939
"2014-08-22 08:00:00"   1408975254694
"2014-08-22 08:58:00"   1408733752599
"2014-08-22 10:05:00"   1408718965157
"2014-08-22 11:00:00"   1408731612398
"2014-08-22 13:30:00"   1408752932528
"2014-08-25 06:15:00"   1408983576002
"2014-08-25 08:15:00"   1408984680142
"2014-08-25 09:50:00"   1409068894755
"2014-08-25 12:00:00"   1408999355264
"2014-08-26 06:45:32"   1409036603781
"2014-08-26 06:49:23"   1409036887123
"2014-08-26 10:30:00"   1409066332536
"2014-08-26 13:30:00"   1409105945904

我想要做的是转换日期时间值,以便我可以对其进行算术运算。

大家都知道日期命令的格式是:

date -u -d "2014-07-22 17:45:00" +%s

所以到目前为止我所做的就是让命令完全按原样提取第一列:

awk  '{print $(NF-2),$(NF-1)}' times.txt

我正在努力解决两件事:

1)从传递给awk命令的date命令获取结果。像这样:

awk  '{print $(NF-2),$(NF-1)}' times.txt | date -u -d AWK_RESULT_HERE +%s

2)是否有办法进行转换,以便当文件中的所有日期都已转换时,我可以对其进行算术运算?

第二列是自纪元以来以毫秒为单位的结束值,我仍然需要找到一种方法来转换它,尽管我认为我可以让它工作。 第一列是开始时间。所以我想要每行的时间(结束时间 - 开始时间)。

提前感谢所有帮助!我非常感谢我在这个论坛上得到的所有答案!

1 个答案:

答案 0 :(得分:2)

GNU awk具有内置时间功能,因此您可以执行此操作:

gawk -F '"' '
    function datetime2epoch(dt) {
        gsub(/[-:]/, " ", dt)
        return mktime(dt)
    }
    {
        t1 = datetime2epoch($2) 
        t2 = $3/1000
        printf "%10d  %14.3f  %.3f\n", t1, t2, t2-t1
    }
' time.data 
1406065500  1406051695.440  -13804.560
1406120400  1406138960.913  18560.913
1406120400  1406185159.123  64759.123
1406131200  1406142510.435  11310.435
...
相关问题