从日志中排序唯一的URL

时间:2011-11-17 16:06:10

标签: shell sorting logging uniq

我需要从Web日志中获取唯一的URL,然后对它们进行排序。我正在考虑使用grep,uniq,sort命令并将其输出到另一个文件

我执行了这个命令:

cat access.log | awk '{print $7}' > url.txt

然后只获得唯一的一个并对它们进行排序:

cat url.txt | uniq | sort > urls.txt

问题是我可以看到重复项,即使文件已排序,这意味着我的命令有效。为什么呢?

4 个答案:

答案 0 :(得分:23)

uniq | sort不起作用:uniq删除了连续的重复项。

正确的方法是sort | uniq或更好sort -u

答案 1 :(得分:5)

uniq需要对其输入进行排序,但是您在uniq之后排序。尝试:

$ sort -u < url.txt > urls.txt

答案 2 :(得分:3)

尝试

cat url.txt | sort | uniq

答案 3 :(得分:0)

对于nginx访问日志,这会调用唯一的URL:

 sed -r "s/.*(GET|POST|PUT|DELETE|HEAD) (.*?) HTTP.*/\2/" /var/log/nginx/access.log | sort | uniq -u

参考: https://www.guyrutenberg.com/2008/08/10/generating-url-list-from-access-log-access_log/