【发布时间】:2014-04-21 19:17:42
【问题描述】:
输入是一个日志文件。我目前感兴趣的过程,在过程的开始和结束时记录一行。开始始终具有特定的固定模式以及对象 ID。末端也有一个固定的模式,以及相同的对象 ID。
我希望输出中每个对象 ID 包含一行,后跟第一行的时间戳,然后是第二行的时间戳。此输出将用于在其他工具中进行进一步分析。输出应按起始行的时间戳排序;没有起点线的物体(见障碍物)应该放在最后。
我想使用标准的 Unix shell 工具来解决这个问题。猜测一下,带有 awk 的东西应该可以解决问题。如果解决方案涉及 Unix shell 脚本,请使用 sh 作为 shell。
障碍: 我不能保证这个过程是严格顺序的,所以在 object1 被完全处理之前,object1 的开始可以跟随 object2 的开始。此外,我不能保证日志文件总是匹配开头和结尾,反之亦然。在这种情况下,ID 应该为缺失点提供一个空值。
输入看起来本质上是这样的:
2014-03-11 09:00:01.123 bla bla bla TAG_START ID:1234 bla bla bla
2014-03-11 09:00:11.123 bla bla bla TAG_END ID:1234 bla bla bla
2014-03-11 09:01:01.123 bla bla bla TAG_START ID:2353 bla bla bla
2014-03-11 09:02:01.123 bla bla bla TAG_END ID:2353 bla bla bla
2014-03-11 09:03:01.123 bla bla bla TAG_START ID:3456 bla bla bla
2014-03-11 09:04:01.123 bla bla bla TAG_END ID:4567 bla bla bla
输出:
1234;09:00:01.123;09:00:11.123
2353;09:01:01.123;09:02:01.123
3456;09:03:01.123;
4567;;09:04:01.123
提前致谢!
【问题讨论】:
-
输出的最后一行不是以
4567开头吗? -
好收获。复制粘贴错误。我看看能不能编辑一下。
-
@user3426170 输出顺序重要吗?
-
最好按照起始标签的顺序,或者按照起始标签的相反顺序。
-
等等,确切地说:通过起始标签的时间戳。把空标签留在最后。