我有一个文件,其中包含以下两列:
"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)是否有办法进行转换,以便当文件中的所有日期都已转换时,我可以对其进行算术运算?
第二列是自纪元以来以毫秒为单位的结束值,我仍然需要找到一种方法来转换它,尽管我认为我可以让它工作。 第一列是开始时间。所以我想要每行的时间(结束时间 - 开始时间)。
提前感谢所有帮助!我非常感谢我在这个论坛上得到的所有答案!
答案 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
...