Unix 在日志文件中搜索唯一IP的总数

Unix 在日志文件中搜索唯一IP的总数,unix,awk,ip,unique,tail,Unix,Awk,Ip,Unique,Tail,我使用下面的格式来计算独特IP访问我的网站的次数 在日志文件中搜索唯一IP的总数 zcat *file* | awk '{print $1}' | sort | uniq -c | sort -n zcat *file* | awk '{a[$1]} END {print length(a)}' 这给了我一个IP列表和它的发生 1001 109.165.113.xxx 1001 178.137.88.xxx 1001 178.175.13.xxx 1001 81.4.217.xxx 106

我使用下面的格式来计算独特IP访问我的网站的次数

在日志文件中搜索唯一IP的总数

zcat *file* | awk '{print $1}' | sort | uniq -c | sort -n
zcat *file* | awk '{a[$1]} END {print length(a)}' 
这给了我一个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)的唯一出现次数,但我希望用一个命令就可以完成此操作。

您可能需要:

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”}
以对循环输出进行排序,请参阅。

以下是用于获取唯一IP总数的awk代码

zcat *file* | awk '{print $1}' | sort | uniq -c | sort -n
zcat *file* | awk '{a[$1]} END {print length(a)}' 

sort | uniq-c | sort-n
替换为
sort-u | wc-l
,您可以在管道中任意多次使用awk谢谢@glennjackman,这很有效