簡體   English   中英

計算文件中令牌的出現次數

[英]Count number of occurrences of token in a file

我有一個服務器訪問日志,每個http請求的時間戳,我想獲得每秒請求數的計數。 使用sedcut -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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM