awk '/^\/page1?/ {print $1}' /path/to/access.log | sort -u > result.txt
Se você quiser uma contagem de cada IP exclusivo, altere sort -u
para sort | uniq -c
Se você quiser corresponder apenas o campo do caminho de solicitação do log (em vez da linha inteira) em relação a /page1
:
awk '$7 ~ /^\/page1?/ {print $1}' /path/to/access.log | sort -u > result.txt
Nota: Acho que os logs de acesso do nginx são os mesmos que os logs de acesso do apache. Caso contrário, conte os campos (contenha todos os espaços, incluindo aquele entre a Data: Hora e o Fuso Horário) no log do nginx, e use o número do campo correto em vez de $7
Por fim, se você quiser imprimir o endereço IP (ou o nome do host, se já tiverem sido resolvidos) e o caminho da solicitação:
awk -v OFS='\t' '$7 ~ /^\/page1?/ {print $1, $7}' /path/to/access.log |
sort -u > result.txt
Para ver os endereços IP que visitaram /page1
, mas nunca visitaram /page2
:
awk '$7 ~ /^\/page1?/ {print $1}' /path/to/access.log | sort -u > result1.txt
awk '$7 ~ /^\/page2?/ {print $1}' /path/to/access.log | sort -u > result2.txt
comm -2 -3 result1.txt result2.txt
A opção comm
do -2
suprime as linhas que aparecem apenas em result2.txt
e -3
suprime as linhas que aparecem nos dois arquivos. a saída é, portanto, linhas que aparecem apenas em results1.txt
.
veja man comm
para mais detalhes.