问题的简短版本:
需要从日志中提取:{在 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节可以交织,但不能与相同的编号交织。
- 可以更改代码以加入玩家名称。
但
- 您不能混合使用会话编号和相同的玩家姓名。