perl – 按重复次数排序
发布时间:2020-12-15 23:23:43 所属栏目:大数据 来源:网络整理
导读:我有一个看起来像这样的文件: 192.168.2.2 150.25.45.7 8080192.168.12.25 178.25.45.7 50192.168.2.2 142.55.45.18 369192.168.489.2 122.25.35.7 8080192.168.489.2 90.254.45.7 80192.168.2.2 142.55.45.18 457 我编了所有数字. 我需要根据第一个ip的重
我有一个看起来像这样的文件:
192.168.2.2 150.25.45.7 8080 192.168.12.25 178.25.45.7 50 192.168.2.2 142.55.45.18 369 192.168.489.2 122.25.35.7 8080 192.168.489.2 90.254.45.7 80 192.168.2.2 142.55.45.18 457 我编了所有数字. 我需要根据第一个ip的重复次数对所有这些文件进行排序.所以输出理想情况如下: 192.168.2.2 8080 369 457 3 192.168.489.2 8080 80 2 192.168.12.25 50 1 所以:首先是ip,所有与第一个ip一致的端口,以及重复次数. 我一直在尝试使用sort命令和awk,但我不想做额外的工作,也许会错过其他一些简单的解决方案. 任何的想法?谢谢 :) 解决方法
Perlish的答案看起来像这样.
#!/usr/bin/perl use strict; use warnings; use 5.010; my %data; # Store IP address and port number while (<DATA>) { chomp; my ($ip,undef,$port) = split; push @{$data{$ip}},$port; } # Sort (in reverse) by length of list of ports for (sort { @{$data{$b}} <=> @{$data{$a}} } keys %data) { say "$_ @{$data{$_}} ",scalar @{$data{$_}}; } __DATA__ 192.168.2.2 150.25.45.7 8080 192.168.12.25 178.25.45.7 50 192.168.2.2 142.55.45.18 369 192.168.489.2 122.25.35.7 8080 192.168.489.2 90.254.45.7 80 192.168.2.2 142.55.45.18 457 输出: 192.168.2.2 8080 369 457 3 192.168.489.2 8080 80 2 192.168.12.25 50 1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |