сортировать уникальные URL-адреса из журнала

Мне нужно получить уникальные URL-адреса из веб-журнала, а затем отсортировать их. Я думал об использовании команды grep, uniq, sort и выводе этого в другой файл.

Я выполнил эту команду:

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

тогда только получите уникальный и отсортируйте их:

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

Проблема в том, что я вижу дубликаты, хотя файл отсортирован, что означает, что моя команда сработала. Почему?


person aki    schedule 17.11.2011    source источник


Ответы (4)


uniq | sort не работает: uniq удаляет смежные дубликаты.

Правильный путь sort | uniq или лучше sort -u. Потому что запускается только один процесс.

person mouviciel    schedule 17.11.2011

uniq нуждается в сортировке ввода, но вы отсортировали после uniq. Пытаться:

$ sort -u < url.txt > urls.txt
person William Pursell    schedule 17.11.2011

Попробуйте что-то вроде этого:

cat url.txt | sort | uniq
person Lewis Norton    schedule 17.11.2011

Для журналов доступа 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/

person Pankaj Garg    schedule 05.06.2018