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的命令模式下,使用
將文件中全部的"]["替換爲"]|[":
2.3 使用以下的awk命令達到目的:
處理後的文件格式以下:
想辦法將"["和"]"去掉,"="替換爲"_",便可做爲輸入文件用工具進行物品的補發。