我使用以下格式来获取唯一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命令来计算第二个输出的唯一出现,但我猜你不能在一个命令行中使用两次AWK。
显然我可以将上面的内容输出到日志文件然后运行第二个awk命令来计算第二个字段(IPS)的唯一出现次数,但我希望能在一个命令中完成这个。
答案 0 :(得分:1)
你可能想要:
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。
答案 1 :(得分:1)
以下是获取唯一ips总数的awk代码
zcat *file* | awk '{a[$1]} END {print length(a)}'