Bash脚本:统计文件中的唯一行

情况:

我有一个很大的文件(数百万行),包含几个小时的networking捕获IP地址和端口,每行一个IP /端口。 行是这种格式:

ip.ad.dre.ss[:port] 

预期结果:

logging时收到的每个数据包都有一个条目,所以有很多重复的地址。 我希望能够通过某种types的shell脚本来运行它,这将能够将其缩减为格式的行

 ip.ad.dre.ss[:port] count 

其中count是特定地址(和端口)的出现次数。 没有特别的工作要做,把不同的端口视为不同的地址。

到目前为止,我使用这个命令从日志文件中删除所有的IP地址:

 grep -o -E [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+(:[0-9]+)? ip_traffic-1.log > ips.txt 

从这个angular度来说,我可以使用一个相当简单的正则expression式来清除由我的地址(我不在乎)发送的所有IP地址,

然后,我可以使用以下来提取唯一的条目:

 sort -u ips.txt > intermediate.txt 

我不知道我怎么可以总结sorting方式。

您可以使用uniq命令来获取sorting的重复行数:

 sort ips.txt | uniq -c 

要获得最常见的结果(感谢Peter Jaric):

 sort ips.txt | uniq -c | sort -bgr