合并具有不同时间戳格式的日志文件

rajaganesh87

我有两种类型的日志文件

标准系统日志格式

时间戳如下

5:2015 Dec 21 07:35:06:ABC:foo1:1559: common.c:946:Enabling filter
6:2015 Dec 21 07:35:08:ABC:bar1:1461: api.c:124:Trigger activated
6:2015 Dec 21 07:35:16:BMC:kernel:-:<6>drivers/usb1_1.c:598:Error processing request on endpoint 0

自定义日志格式

日期时间在文件的第一行中给出。接下来的几行相对于第一行。示例如下:

Timestamp H:M:S 15:4:1 D:M:Y 16:1:2015
Firmware Version: 121020150140
[04:01]------------[ Logs ]------------
[04:03]Device Data: -> Supported Attributes -> 0x8033B
[04:01]Device Cleanup

[04:19]SendClearMsg ...
[04:23]Param:GetData failed
[04:51]Current Update Count:7
[05:01]MODECHK:Normal mode

4:01的时间戳是4分钟,自15:4:1以来为1秒,应转换为15:08:2。

有什么建议可以实现这一目标吗?

  • 将相对时间转换成绝对时间
  • 与syslog合并为一个大文件,按时间排序
这里

此解决方案使用awk脚本将第一个文件中的日期转换为自该纪元以来的秒数,并将该数字前置到输出中。我们date +%s --date经常做艰苦的工作,并secs通过调用awk的getline函数将命令的输出捕获到awk变量中(awk语法为:command | getline variable)。

awk <log1 >log1.new '
{ y = substr($0,3,4); m = $2; d = $3; hms = substr($0,15,8)
  "date \"+%s\" --date \"" d " " m " " y " " hms "\"" | getline secs
  print secs " " $0
}'

第二个awk脚本对第二个文件执行相同的操作,但仅对时间戳记的第一行执行此操作,该脚本保存在awk变量中base在其他行上,我们只需将分钟和秒的偏移量添加到该基准,并使用date第一个文件的格式将自纪元以来的秒数转换为实际日期。

awk <log2 >log2.new '
/^Timestamp/{ split($5,x,":"); dmy = sprintf("%04d/%02d/%02d",x[3],x[2],x[1])
              split($3,x,":"); hms = sprintf("%02d:%02d:%02d",x[1],x[2],x[3])
              "date \"+%s\" --date \"" dmy " " hms "\"" | getline base
}
/^\[/ { mins = substr($0,2,2); secs = substr($0,5,2);
        tot = base + mins*60+secs
        "date \"+%Y %b %d %H:%M:%S\" --date @" tot | getline date
        print tot " -:" date " " substr($0,8)
}'

然后,按编号字段上的排序将两个文件合并,最后用sed删除编号。

sort -m -n -k1,1 log1.new log2.new |
sed 's/^[^ ]* //'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

合并具有不同时间戳(不同时间间隔)的两个数据帧

如何合并具有不同时间戳的两个不同数据帧?

SQL查询以合并两个具有不同时间戳的表作为索引

如何合并具有不同时间戳密度的两个熊猫数据帧?

如何合并两个具有不同时间戳的熊猫

熊猫:合并具有不同时间频率的列

用于创建具有不同时间戳和不同列映射的合并表的 SQL 查询

绘制超过一天的具有不同时间戳和datetime.time格式的时间序列

比较 R 中具有不同时间戳的时间序列

Bash 命令对具有不同时间序列行的两个 csv 文件进行列合并

将时间序列合并为具有不同时间实例的单个图

合并两个具有不同时间粒度的时间序列

如何在R中同步具有部分不同时间戳的数据

如何删除包含相同字段但具有不同时间戳的旧数据的 Sqlite 行?

在具有不同时间戳的两个文档之间减去数字字段

获取具有相同时间戳但不同标识符的记录

SQL 输出 - 包括来自不同表的具有相同时间戳的列

删除具有相同时间戳但值不同的重复行

删除具有相同时间戳numpy的行

在Python中合并具有不同时间频率的系列/数据框

SparkSQL:如何对两个具有不同时间戳的时间序列数据集求和

合并具有不同格式的日志文件

forTime循环中具有不同时间的setTimeout

具有不同时间间隔的系列的工具提示

具有不同时间跨度的闪烁按钮

如何在MySQL中删除具有相同ID和不同时间戳的旧行?

将具有不同时间戳的两行数据匹配为一行(SQL Server)

如何将具有不同时间格式的列统一为一种格式?

将2个具有不同时间范围的类似查询合并为1个,而不是使用UNION ALL