Bash “通过awk命令”;“结果”;as变量到日期命令

Bash “通过awk命令”;“结果”;as变量到日期命令,bash,date,awk,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-0

我有一个包含以下两列的文件:

"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命令的格式是:

date -u -d "2014-07-22 17:45:00" +%s
到目前为止,我所做的是让命令准确地提取第一列:

awk  '{print $(NF-2),$(NF-1)}' times.txt
有两件事我正在努力解决:

1) 从传递给
date
命令的
awk
命令中获取结果。大概是这样的:

awk  '{print $(NF-2),$(NF-1)}' times.txt | date -u -d AWK_RESULT_HERE +%s
2) 有没有一种方法可以就地进行转换,这样当文件中的所有日期都被转换后,我就可以对其进行算术运算

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


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

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 

您可以使用while循环:
awk'{print$(NF-2),$(NF-1)}'times.txt |同时读取行;do date-u-d$行+%s;完成
@scragar这应该是一个答案,而不是一个评论。@scragar感谢您的快速回复,不过,我收到一个错误声明:
日期:额外操作数+%s
,当我在读取行时将其更改为
awk'{print$(NF-2),$(NF-1)}times.txt;do date-u-d“$LINE”+%s;完成
I get
date:invalid date
“2014-09-10 07:00:00”`请注意,“2014”之前的符号是表达式符号,末尾的符号是单引号。
1406065500  1406051695.440  -13804.560
1406120400  1406138960.913  18560.913
1406120400  1406185159.123  64759.123
1406131200  1406142510.435  11310.435
...