我需要从Web日志中获取唯一的URL,然后对它们进行排序。我正在考虑使用grep,uniq,sort命令并将其输出到另一个文件
我执行了这个命令:
cat access.log | awk '{print $7}' > url.txt
然后只获得唯一的一个并对它们进行排序:
cat url.txt | uniq | sort > urls.txt
问题是我可以看到重复项,即使文件已排序,这意味着我的命令有效。为什么呢?
答案 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/