我有一个巨大的文本文件,其中包含 IP 地址:
123.33.22.33
221.23.128.2
123.33.22.33
92.222.192.12
92.222.192.12
123.33.22.33
我可以将其排序为:
123.33.22.33
123.33.22.33
123.33.22.33
221.23.128.2
92.222.192.12
92.222.192.12
并且(用肉眼)看到第一个 IP 出现了三次,第二个 IP 出现了一次,最后一个 IP 出现了两次。
我希望能够在大型日志文件中执行此操作,显然是以自动化方式。这可能吗?
谢谢
答案1
cat file_with_ips | sort -nr | uniq -c | sort -nr -k 1
将按 IP 计数降序排序,在第一列显示计数器
例如
root@pinkpony:~# cat /tmp/xx
123.33.22.33
221.23.128.2
123.33.22.33
92.222.192.12
92.222.192.12
123.33.22.33
root@pinkpony:~# cat /tmp/xx | sort -nr | uniq -c | sort -nr -k1
3 123.33.22.33
2 92.222.192.12
1 221.23.128.2
root@pinkpony:~#
答案2
一旦你对它进行了排序,你就可以通过 uniq -c 进行管道传输
cat sorted.list | uniq -c
2 1.2.3.4
1 5.6.7.8
这将为您统计总数。
答案3
您可以使用 uniq -c 来获取计数,但请确保先对输入进行排序,否则您只会获得连续、相似的行的计数:
sort yourfile | uniq -c
然后我经常根据匹配次数最多的行进行排序:
sort yourfile | uniq -c | sort -nr