sed、awk 多行日志文件,数字{0-999]标识关系

sed、awk 多行日志文件,数字{0-999]标识关系

问题的简短版本:
需要从日志中提取:{在 Linux 上使用 sed 和 awk}
最后的日志示例中的时间、玩家名{可以有许多特殊字符}、GUID、IP。

更长的版本:
如果“附近”时间点的玩家编号与下一行匹配,如何合并 2 个日志文件行。

该号码仅在玩家断开连接之前有效。
该号码将被新玩家使用。
这会产生一个特殊问题,如下所示:玩家 #106 是 4 条线,但指的是两个不同的玩家。

到目前为止的进展。
阅读手册和论坛。已经提取各个数据字段并将它们写入 mysql。

但是,我确实需要将相关数据记录在一起:
什么玩家什么知识产权以及什么GUID连接到什么时间
正如我所看到的,如果玩家数量在接近时间点匹配,则只能通过组合两条线来获得此数据。

日志示例:

23:57:20 : Player #29 Simplename (10.21.23.32:2304) connected  
23:57:22 : Player #29 Simplename - GUID: 1234567890abcdef123456789aaaaa00 (unverified)
23:56:13 : Player #106 [Som(e) name]  Gabriel (10.21.23.33:2304) connected  
23:56:15 : Player #106 [Som(e) name]  Gabriel - GUID: 1234567890abcdef123456789bbbbb00 (unverified)  
23:56:51 : Player #106 [gp0] SomeN@me 123  (10.21.23.34:2304) connected  
23:56:52 : Player #106 [gp0] SomeN@me 123  - GUID: 1234567890abcdef123456789aaaaa02 (unverified)  
23:57:18 : Player #20 [gp0] SomeN@me 123  (10.21.23.44:2304) connected  
23:57:19 : Player #20 [gp0] SomeN@me 123  - GUID: 1234567890abcdef123456789aaaaa03 (unverified)  
23:57:51 : Player #6 <<t>> 'N@me5_Can=Be..Hard (10.21.23.32:2304) connected  
23:57:53 : Player #6 <<t>> 'N@me5_Can=Be..Hard - GUID: 1234567890abcdef123456789aaaaa04 (unverified)  

答案1

假设IP和GUID有固定位置

/connected/ {
  name = substr($0,index($0,$4)+length($4)+1) ;
  nip=NF-1 ;
  name = substr(name,1,index(name,$nip)-2) ;
  session[$4]=name ;
  connected[name]=$0 ;
  ip[name]=$nip ;
}

/GUID/ {
  if ( $4 in session ) {
    ngu = NF-1 ;
    guid=$ngu ;
    printf "%s - %s - %s -%s\n",$1,session[$4],guid,ip[session[$4]] ;

    delete session[$4] ;
  }

}
  • IP、GUID 中没有白色...
  • 连接时捕获名称
  • 我从GUID线获取时间,注册连接时间可以像IP一样保存。
  • ( :2304)我离开作为练习从 IP 中删除...

因此

23:57:22 - Simplename - 1234567890abcdef123456789aaaaa00 -(10.21.23.32:2304)
23:56:15 - [Som(e) name]  Gabriel - 1234567890abcdef123456789bbbbb00 -(10.21.23.33:2304)
23:56:52 - [gp0] SomeN@me 123  - 1234567890abcdef123456789aaaaa02 -(10.21.23.34:2304)
23:57:19 - [gp0] SomeN@me 123  - 1234567890abcdef123456789aaaaa03 -(10.21.23.44:2304)
23:57:53 - <<t>> 'N@me5_Can=Be..Hard - 1234567890abcdef123456789aaaaa04 -(10.21.23.32:2304)

笔记:

  • 第99节可以交织,但不能与相同的编号交织。
  • 可以更改代码以加入玩家名称。

  • 您不能混合使用会话编号和相同的玩家姓名。

相关内容