[英]Count number of occurrences of token in a file
我有一個服務器訪問日志,每個http請求的時間戳,我想獲得每秒請求數的計數。 使用sed
和cut -c
,到目前為止,我已設法將文件剪切為時間戳,例如:
2008年9月22日20:00:21 +0000
2008年9月22日20:00:22 +0000
2008年9月22日20:00:22 +0000
2008年9月22日20:00:22 +0000
2008年9月22日20:00:24 +0000
2008年9月22日20:00:24 +0000
我想得到的是每個唯一時間戳在文件中出現的次數。 例如,通過上面的示例,我想得到如下輸出:
2008年9月22日20:00:21 +0000:1
2008年9月22日20:00:22 +0000:3
2008年9月22日20:00:24 +0000:2
我已經使用sort -u
將時間戳列表過濾到一個唯一的令牌列表,希望我可以使用grep之類的
grep -c -f <file containing patterns> <file>
但這只會產生一條總共匹配線的單行。
我知道這可以在一行中完成,將一些實用程序串在一起......但我想不出哪個。 誰知道?
我想你在找
uniq --count
-c, - count前綴行數出現次數
將AWK與關聯數組一起使用可能是另類解決方案。
以防萬一您希望以最初指定的格式輸出(最后出現的數量):
uniq -c logfile | sed 's/\([0-9]+\)\(.*\)/\2: \1/'
使用awk :
cat file.txt | awk '{count[$1 " " $2]++;} \
END {for(w in count){print w ": " count[w]};}'
湯姆的解決方案:
awk '{count[$1 " " $2]++;} END {for(w in count){print w ": " count[w]};}' file.txt
更普遍的工作。
我的文件沒有排序:
name1
name2
name3
name2
name2
name3
name1
因此,事件並沒有相互跟隨,並且uniq
無法正常工作:
1 name1
1 name2
1 name3
2 name2
1 name3
1 name1
但是使用awk腳本:
name1:2
name2:3
name3:2
也許用xargs? 不能把它全部放在我的頭上,但是在你的排序-u上使用xargs,這樣每個唯一的第二個你可以grep原始文件並做一個wc -l來獲取數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.