• awk处理一个需求备忘


    1. 需求描述

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

    其中,lottery_fail日志格式如下:

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

    key|id_num

    例如:

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

    2. 实现步骤

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

    汇总处理后得到的文件格式如下:

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

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

    在vim的命令模式下,使用

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

    将文件中所有的"]["替换为"]|[":

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

    处理后的文件格式如下:

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

  • 相关阅读:
    JAVA入门到精通-第42讲-坦克大战9
    JAVA入门到精通-第40讲-线程
    JAVA入门到精通-第37讲-事件总结-坦克大战5
    大数据 资源
    在线工具
    idea 添加 阿里代码规范
    idea 控制台中文乱码 解决方法
    idea 构建maven web项目
    oracle SQL 练习
    Oracle分页
  • 原文地址:https://www.cnblogs.com/litterrondo/p/3338773.html
Copyright © 2020-2023  润新知