Basta ter awk
para lidar com tudo para você
awk '$20 ~ /GET/{gsub(/"/, "", $24); sub(/[^.]*\./, "", $24); a[$24]++};
END{for (k in a)print k, a[k]}' /var/log/nginx/error_log
Estou procurando um caminho para o seguinte.
Aqui está uma linha do log de erros do nginx.
2014/12/29 21:17:57 [error] 30078#0: *311826 openat() "/var/www/html/images/images/Outlet-Celine-Boston-Square-Calfskin-Bags-Red_celine_2140_1.jpg" failed (2: No such file or directory), client: 207.46.13.42, server: server.domain.tld, request: "GET /images/images/Outlet-Celine-Boston-Square-Calfskin-Bags-Red_celine_2140_1.jpg HTTP/1.1", host: "www.buylvneverfullpm.net"
Existem milhares mais, por isso preciso de uma forma de:
Eu tenho usado o seguinte:
awk '($20 ~ /GET/)' /var/log/nginx/error_log | awk '{print $24}' | sort | uniq -c | sort -rn
mas como não tira o "www", existem entradas repetidas.
Tags nginx text-processing logs awk