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 getdate: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
...