Найдите файл журнала для общего количества уникальных ips

Я использую следующий формат, чтобы подсчитать, сколько раз уникальные IP-адреса попадали на мой сайт.

Найдите файл журнала для общего количества уникальных ips

zcat *file* | awk '{print $1}' | sort | uniq -c | sort -n

Это дает мне список IP-адресов и их возникновение.

1001 109.165.113.xxx
1001 178.137.88.xxx
1001 178.175.13.xxx
1001 81.4.217.xxx
1060 74.122.180.xxx
1103 67.201.52.xxx
1203 81.144.138.xxx
1670 54.240.158.xxx
1697 54.239.137.xxx
2789 39.183.147.xxx
4630 93.158.143.xxx

То, что я хочу выяснить, просто и можно ли это сделать в одной командной строке.

Я просто хочу подсчитать этот список. Итак, из приведенного выше примера. Я хочу, чтобы буфер сообщил мне 11. Я думал, что могу использовать вторую команду AWK для подсчета уникальных вхождений 2-го вывода, но я думаю, что вы не можете использовать AWK дважды в одной командной строке.

Очевидно, я могу вывести приведенное выше в файл журнала, а затем запустить вторую команду awk для подсчета уникальных вхождений второго поля (IPS), но я надеялся сделать это с помощью одной команды.


person odr    schedule 05.12.2014    source источник
comment
заменить sort|uniq -c|sort -n на sort -u | wc -l   -  person glenn jackman    schedule 05.12.2014
comment
И вы можете использовать awk сколько угодно раз в конвейере.   -  person glenn jackman    schedule 05.12.2014
comment
спасибо @glennjackman, это работает   -  person odr    schedule 11.12.2014


Ответы (2)


Вы можете захотеть:

zcat ... |
awk '{cnt[$1]++} END{for (ip in cnt) {unq++; print cnt[ip], ip}; print unq+0}'

Если у вас есть GNU awk, вы можете добавить BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"} впереди, чтобы отсортировать вывод цикла, см. http://www.gnu.org/software/gawk/manual/gawk.html#Controlling-Scanning.

person Ed Morton    schedule 05.12.2014

Вот код awk для получения общего количества уникальных ips

zcat *file* | awk '{a[$1]} END {print length(a)}' 
person BMW    schedule 07.12.2014