请告诉我两个时间戳
什么是算最有效的方法,措施(计算)两个时间戳从日志文件之间之间的时间跨度来衡量的时间跨度最好的方法是什么? 我知道Excel/Numbers/Refine中的愚蠢解决方案,但我正在寻找一个聪明的awk-oneliner。请告诉我两个时间戳
示例: 的自动门系统的电梯n个楼层操作。
电梯打开门: Start Move to Work_position
End Move to Work_position
Start Move to Home_Position End Move to Home_Position
Elevator_021 logger: 2017-02-13 13:11:33.735 [MONITORING] CYL_A1; Floor_12 Door ;Start Move to Work_position
Elevator_021 logger: 2017-02-13 13:11:34.800 [MONITORING] CYL_A1; Floor_12 Door ;End Move to Work_position
Elevator_021 logger: 2017-02-13 13:26:12.893 [MONITORING] CYL_A1; Floor_12 Door ;Start Move to Home_Position
Elevator_021 logger: 2017-02-13 13:26:13.898 [MONITORING] CYL_A1; Floor_12 Door ;End Move to Home_Position
Elevator_021 logger: 2017-02-13 14:51:03.211 [MONITORING] CYL_A1; Floor_12 Door ;Start Move to Work_position
Elevator_021 logger: 2017-02-13 14:51:04.276 [MONITORING] CYL_A1; Floor_12 Door ;End Move to Work_position
我盼到像这样的输出:
Elevator_021 logger: 2017-02-13 13:11:33.735 [MONITORING] CYL_A1; Floor_12 Door ;Start Move to Work_position
Elevator_021 logger: 2017-02-13 13:11:34.800 [MONITORING] CYL_A1; Floor_12 Door ;End Move to Work_position
to Work 1065 ms
Elevator_021 logger: 2017-02-13 13:26:12.893 [MONITORING] CYL_A1; Floor_12 Door ;Start Move to Home_Position
Elevator_021 logger: 2017-02-13 13:26:13.898 [MONITORING] CYL_A1; Floor_12 Door ;End Move to Home_Position
to Home 1005 ms
Elevator_021 logger: 2017-02-13 14:51:03.211 [MONITORING] CYL_A1; Floor_12 Door ;Start Move to Work_position
Elevator_021 logger: 2017-02-13 14:51:04.276 [MONITORING] CYL_A1; Floor_12 Door ;End Move to Work_position
to Work 3976 ms
你可以使用gawk
做这样的事情:
awk 'function dtime(s) {
x=match($0, /([0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9:]+)(\.[0-9]+).*([0-9]{4}-[0-9]{2}-[0-9]{2}\s[0-9:]+)(\.[0-9]+).*(to \w+)_/, arr)
if (x) {
s1=arr[1]
s2=arr[3]
gsub(/[-:]/, " ", s1)
gsub(/[-:]/, " ", s2)
t1=mktime(s1)+arr[2]
t2=mktime(s2)+arr[4]
return arr[5] " " (t2-t1)*1000 " ms"
}
else
return ""
}
BEGIN {RS=ORS="\n\n"}
{print $0 " -> " dtime($0) }' file
打印:
Elevator_021记录: 2017-02-13 13:11:33.735 [监测] CYL_A1; Floor_12 Door;开始移动到Work_position Elevator_021 logger:2017-02-13 13:11:34.800 [MONITORING] CYL_A1;工作位置 - >工作1065 ms
Elevator_021 logger:2017-02-13 13:26:12.893 [MONITORING] CYL_A1; Floor_12 Door;开始移动到Home_Position Elevator_021 logger:2017-02-13 13:26:13.898 [MONITORING] CYL_A1; Floor_12 Door; End移动到Home_Position - >返回首页1005 ms
Elevator_021 logger:2017-02-13 14:51:03.211 [MONITORING] CYL_A1; Floor_12 Door;开始移动到Work_position Elevator_021 logger:2017-02-13 14:51:04.276 [MONITORING] CYL_A1; Floor_12 Door; End移动到Work_position - >工作1065 ms
thx! 但是,不! \t AWK:在功能DTIME上下文源极线2语法错误为x =匹配($ 0,/([0-9] {4} - [0-9] {2} - [0-9] {2} \ [0-9:] +)(\。\t [0-9] +)。*([0-9] {4} - [0-9] {2} - [0-9] { 2} \ s [0-9:] +)(\。[0-9] +)。*(to >>> \ w +)_ /,
非法声明这将是从1个衬垫在POSIX awk的,因为它没有时间的功能远你可以调查使用'date'的时间戳转换或使用Perl或。安装GAWK – dawg
它的工作原理。 - 切换到另一个OS-X机 但仅与相关线的“预分组” - 需要相关对之间的一个空行 –