计算文件中令牌出现的次数
时间:2020-03-06 14:40:29 来源:igfitidea点击:
我有一个服务器访问日志,带有每个http请求的时间戳,我想每秒获取一次请求数量的计数。到目前为止,我已经使用sed
和cut -c
将文件缩减为仅时间戳,例如:
22-Sep-2008 20:00:21 +0000 22-Sep-2008 20:00:22 +0000 22-Sep-2008 20:00:22 +0000 22-Sep-2008 20:00:22 +0000 22-Sep-2008 20:00:24 +0000 22-Sep-2008 20:00:24 +0000
我想得到的是每个唯一时间戳出现在文件中的次数。例如,在上面的示例中,我想获取如下所示的输出:
22-Sep-2008 20:00:21 +0000: 1 22-Sep-2008 20:00:22 +0000: 3 22-Sep-2008 20:00:24 +0000: 2
我已经使用sort -u
来过滤时间戳列表到唯一的令牌列表,希望我可以像这样使用grep。
grep -c -f <file containing patterns> <file>
但这只会产生全部匹配行中的一行。
我知道这可以在一行中完成,将一些实用程序串在一起……但是我想不出哪一个。有人知道吗
解决方案
我想你在找
uniq --count
-c, --count prefix lines by the number of occurrences
也许使用xargs?不能当场将所有内容放在一起,而是在排序-u时使用xargs,这样一秒钟,我们就可以grep原文件并执行wc -l以获得数字。
对关联数组使用AWK可能是解决此类问题的另一种方法。
万一我们希望以最初指定的格式输出(末尾出现的次数),以防万一:
uniq -c logfile | sed 's/\([0-9]+\)\(.*\)/: /'
使用awk:
cat file.txt | awk '{count[ " " ]++;} \ END {for(w in count){print w ": " count[w]};}'