我需要从网络日志中获取唯一的 URL,然后对它们进行排序。我正在考虑使用 grep、uniq、sort 命令并将其输出到另一个文件
我执行了这个命令:
cat access.log | awk '{print $7}' > url.txt
然后只获取唯一的并对其进行排序:
cat url.txt | uniq | sort > urls.txt
问题是我可以看到重复项,即使文件已排序,这意味着我的命令有效。为什么?
uniq | sort
不起作用:uniq
删除连续的重复项。
正确的方法是sort | uniq
或更好sort -u
。因为只产生了一个进程。
uniq 需要对其输入进行排序,但您在 uniq 之后排序。尝试:
$ 排序 -u < url.txt > urls.txt
尝试这样的事情:
cat url.txt | sort | uniq
对于 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/