19

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

我执行了这个命令:

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

然后只获取唯一的并对其进行排序:

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

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

4

4 回答 4

26

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

正确的方法是sort | uniq或更好sort -u。因为只产生了一个进程。

于 2011-11-17T16:08:09.290 回答
5

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

$ 排序 -u < url.txt > urls.txt
于 2011-11-17T16:08:30.727 回答
3

尝试这样的事情:

cat url.txt | sort | uniq
于 2011-11-17T16:10:18.477 回答
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/

于 2018-06-05T11:17:14.777 回答