awk处理一个需求备忘

1. 需求描述vim

2013年9月17日发布抽奖活动,抽奖活动接口doLottery在BuyItemServer,调用了GameServer的presentItem接口发放玩家抽到的物品,GameServer缓存了物品列表,系统一共部署了7台GameServer,重启后,有一台GameServer拉取物品列表缓存失败(缘由目前未知,在查找中),致使presentItem接口发送物品失败。如今须要根据BuyItemServer中的doLottery记录的lottery_fail日志,来给这部分玩家补发抽到的物品。缓存

其中,lottery_fail日志格式以下:工具

补发物品经过以前实现的工具来完成,补发工具要求的输入文件格式是:日志

key|id_numblog

例如:接口

要作的事情就是,根据最后一列记录的物品id和数量,处理成符合格式要求的文件。部署

2. 实现步骤awk

2.1 处理9月17日到今日的全部日志文件,提取第五列和最后一列到一个文件中im

汇总处理后获得的文件格式以下:db

若第二列中仅包含一个物品项,会很容易处理,如今的问题是第二列中可能包含多个物品项(每一个中括号内是一个物品项),考虑用awk将第二列中的物品项分开处理,每个物品项,和第一列的号码从新组合成一个记录。

2.2 特殊处理文件,使文件更容易用awk处理

在vim的命令模式下,使用

%:s/\]\[/\]|\[/g

将文件中全部的"]["替换为"]|[":

2.3 使用以下的awk命令达到目的:

处理后的文件格式以下:

想办法将"["和"]"去掉,"="替换为"_",便可做为输入文件用工具进行物品的补发。

相关文章
相关标签/搜索