我正在尝试从日志文件中获取最受欢迎的域
日志格式如下
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为空,暗示命令错误
答案 0 :(得分:1)
perl -nle '$d{$1}++ if m!//([^/]+)!; END {foreach(sort {$d{$a} <= $d{$b}} keys(%d)) {print "$d{$_}\t$_"};}' your.log
如果你不介意perl
答案 1 :(得分:0)
uniq -c计算唯一出现次数,但需要排序输入。 sort对数据流进行排序 grep有一个标志-o,它只返回与正则表达式匹配的输出
这三个部分放在一起就是你需要在这上面执行map / reduce并获得你想要的数据。
grep -o '[^.]*\.[^.]*$' logfile | sort | uniq -c
grep只获取单个topdomains和域名,所有条目都按排序排序,uniq计算出现的次数。
在末尾添加排序-n将为您提供一个列表,其中最顶层的条目是最高的
grep -o '[^.]*\.[^.]*$' logfile | sort | uniq -c | sort -nr