Linux awk sort
2018-05-31 15:56:38|25961|Cmd_Hero_GetFreeHeros_CS|2|481|0|14|22
2018-05-31 15:56:38|25961|Cmd_Role_GetNotice_CS|2|41|0|15|2
2018-05-31 15:56:38|25961|Cmd_IAP_GetList_CS|2|175|0|16|807
2018-05-31 15:56:38|25961|Cmd_Ping_GetAllServerIp_CS|2|70|0|17|159
2018-05-31 15:56:38|25961|Cmd_Skill_GetAllData_CS|2|51|0|18|8
2018-05-31 15:56:38|25961|Cmd_Act_GetList_CS|2|4289|0|19|305342
2018-05-31 15:56:38|25961|Cmd_Live_GetFocusList_CS|2|97|0|20|0
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|43|0|21|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|32|0|22|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|31|0|23|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|31|0|24|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|33|0|25|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|32|0|26|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|31|0|27|4
2018-05-31 15:56:38|25961|Cmd_Role_GetClientInfo_CS|4|31|0|28|4
2018-05-31 15:56:38|25961|Cmd_Role_SetNationality_CS|4|508|0|29|4
2018-05-31 15:56:38|25961|Cmd_Battle_GetBattleData_CS|9|301|0|30|105
awk -F"|" ‘{if($3 != "" a[$3]++)} END {for(i in a) printf("%-8s %s\n", a[i], i)}‘|sort -r -n -k1
上面是客戶端協議log記錄,假如要統計每條消息的量就可以使用awk命令
-F "|" :將每條記錄以‘|’字符分割
if($3 != "" a[$3]++):動作第三列部位空,就以第三列為下標數組統計數量,感覺有點像map,有點詭異,awk會針對每一行執行這個動作
END {for(i in a) printf("%-8s %s\n", a[i], i)}:所有行執行完了會執行這個END,打印a數組中的所有value和key
printf:print會自動換行,但可實現功能簡單,printf不支持換行,得自己加\n,支持格式化輸出
|sort -r -n -k1:通過管道讓sort排序,-r表示逆序 -n表示按照大小排序,默認是按照asscii碼比較每個字符,-k1表示第一列排序
一個awk命令就這麽復雜,暈
Linux awk sort