Linux 中文本文件中 IP 的“按计数分组”

Linux 中文本文件中 IP 的“按计数分组”

我有一个巨大的文本文件,其中包含 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

相关内容