从日志中获取最受欢迎的域
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
我正在尝试从日志文件中获取最流行的域
日志格式是这样的
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