计算每个 IP 地址出现在日志文件中的次数

Jam*_*tal 13 awk sort

我有一个格式如下的文件:

$ cat file.txt

27.33.65.2
27.33.65.2
58.161.137.7
121.50.198.5
184.173.187.1
184.173.187.1
184.173.187.1
Run Code Online (Sandbox Code Playgroud)

将文件解析file.txt为以下格式的最佳方法是什么:

27.33.65.2: 2
58.161.137.7: 1
121.50.198.5: 1
184.173.187.1: 3
Run Code Online (Sandbox Code Playgroud)

换句话说,我想遍历文件并计算每个 IP 地址出现的次数。我已经运行了它,sort所以所有的 IP 地址都是按顺序排列的,并且直接在彼此之后。

gle*_*man 26

您正在寻找 uniq -c

如果它的输出不符合您的喜好,则可以很容易地对其进行解析和重新格式化。

例如:

$ uniq -c logfile.txt | awk '{print $2": "$1}'
27.33.65.2: 2
58.161.137.7: 1
121.50.198.5: 1
184.173.187.1: 3
Run Code Online (Sandbox Code Playgroud)

  • 因为 `uniq` 仅适用于已排序的输入(它匹配相邻的匹配行,而不是文件中的任何行)。 (3认同)
  • @HaukeLaging - 我很欣赏你所说的,但正如大多数计算机用户永远不会冒险超越 OSX 和 Windows 一样,此外,大多数 Unix 用户也不会冒险超越使用特定任务的指定工具。使用 AWK 不适合胆小的人,看看使用 AWK 执行这项基本任务需要做什么与 Glenn 的解决方案需要什么。我认为我公平地说,他是一种更简单的精神掌握解决方案,尽管你的可能更有效。顺便说一句,我都做了紫外线,因为它们都是正确的! (2认同)

Hau*_*ing 6

uniq确实,似乎是更聪明的解决方案。awk 方式:

awk '{ip_count[$0]++}; '\
'END {for (ip in ip_count) printf "%15s: %d\n",ip,ip_count[ip];}' file
Run Code Online (Sandbox Code Playgroud)