我有一个看起来像这样的文件:
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
Run Code Online (Sandbox Code Playgroud)
我编了所有数字.
我需要根据第一个ip的重复次数对所有这些文件进行排序.所以输出理想情况如下:
192.168.2.2 8080 369 457 3
192.168.489.2 8080 80 2
192.168.12.25 50 1
Run Code Online (Sandbox Code Playgroud)
所以:首先是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
Run Code Online (Sandbox Code Playgroud)
输出:
192.168.2.2 8080 369 457 3
192.168.489.2 8080 80 2
192.168.12.25 50 1
Run Code Online (Sandbox Code Playgroud)