[英]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.