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|105html

awk -F"|" '{if($3 != "") a[$3]++} END {for(i in a) printf("%-8s %s\n", a[i], i)}'|sort -r -n -k1數組

上面是客戶端協議log記錄,假如要統計每條消息的量就可使用awk命令htm

-F "|" :將每條記錄以‘|’字符分割排序

if($3 != "" a[$3]++):動做第三列部位空,就以第三列爲下標數組統計數量,感受有點像map,有點詭異,awk會針對每一行執行這個動做ci

END {for(i in a) printf("%-8s %s\n", a[i], i)}:全部行執行完了會執行這個END,打印a數組中的全部value和keyit

printf:print會自動換行,但可實現功能簡單,printf不支持換行,得本身加\n,支持格式化輸出io

|sort -r -n -k1:經過管道讓sort排序,-r表示逆序 -n表示按照大小排序,默認是按照asscii碼比較每一個字符,-k1表示第一列排序test

http://awk.readthedocs.io/en/latest/chapter-one.html#id3awk

相關文章
相關標籤/搜索