awk統計文本里某一列重複出現的次數

比如這樣的場景:現在有一個文本,裏面是這樣的內容:

NOTICE: 12-14 15:11:13:  parser. * 6685  url=[http://club.pchome.net/thread_1_18_7283270___TRUE.html] get_tm=115 PAGE=15471[Z]:59066 css_tm=1043 css_res=0/4[0] CONT=3230[Z]:4797 LINK=6095[Z]:22834 TITL=61 PtDef=7 UnifyUrl=47 PvDetail=444 data_path_tm=254 antispam_tm=1811816124 spaminfo=825 [spam_punish_type:0] spam_serv_tm=[393725], spam_except[ANTI_SUCCESS] ext_tm=183608721 ext_sv=[10.226.42.53:33018] ext_ret=4 dump_tm=226  <StContinuesBuild:don't have FeedData, all strategies must run> db_type=se lua_ku_type=se get IndexFeature is :1270 total_tm=816832421

 

很明顯的這個文本里面的第三列是個時間戳,我想要知道同一個時間內處理了多少條記錄,那麼使用awk,這樣即可。

cat logfile | awk '{a[$3]++}END{for(i in a){print i,a[i] | "sort -k 1"}}' 

 

在這條命令中,將文本的第三列作爲key,同樣的key不停累加,最後輸出累加的數組值。最後sort -k1是將結果按照第一列來排序,就是時間戳的小時來排序。

 cat logfile |awk '{a[$1]++}END{for(i in a){print i,a[i]}}'|awk '{if($2 > 1 ){print i,$0}}'

 

 

還有一種更爲簡便的方法,使用linux的uniq -c命令來統計,不用寫awk命令:

cat logfile | awk '{print $3}' | uniq -c

說實話,這個命令不好用,不準確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章