从日志中获取最受欢迎的域

Get most popular domains from log

我正在尝试从日志文件中获取最流行的域

日志格式是这样的

197.123.43.59,   27/May/2015:01:00:11 -0600, https://m.facebook.com/

我只对域感兴趣,我想要如下输出

XXXX facebook.com

其中 XXXX 是日志中相似条目的数量

一行 unix 命令任何人

编辑

我尝试了以下方法

grep -i * sites.log | sort | uniq -c | sort -nr | head -10 &> popular.log

但是popular.log是空的,暗示命令错误

perl -nle '$d{}++ if m!//([^/]+)!; END {foreach(sort {$d{$a} <= $d{$b}} keys(%d)) {print "$d{$_}\t$_"};}' your.log

如果你不介意 perl

uniq -c 计算唯一出现次数,但需要排序的输入。 sort 对数据流进行排序 grep 有一个标志 -o 其中 returns 只有匹配正则表达式的输出

这三个部分放在一起就是您需要对此执行 map/reduce 并获取所需数据的内容。

grep -o '[^.]*\.[^.]*$' logfile | sort | uniq -c

grep 仅获取单个顶级域和域名,所有条目均按排序排序,uniq 计算出现次数。

在末尾添加一个 sort -n 会给你一个列表,其中最上面的条目是最高的

grep -o '[^.]*\.[^.]*$' logfile | sort | uniq -c | sort -nr