====== Sortieren von IP-Adressen ======
* Urspruenglicher Autor: Dirk Deimeke
* Urspruengliches Datum: 12.02.2011
Haeufig kommt es vor, dass man eine Liste von IP-Adressen sortieren muss.
Dabei ist es hilfreich, sich zu vergegenwaertigen, dass IPs (bei IPv4) aus 4 Bytes bestehen. Also kann man jede IP auch durch eine Zahl darstellen. Wenn ''5.6.7.8'' die IP-Adresse ist, kann man sie auch in dieser Form schreiben ''5*256*256*256 + 6*256*256 + 7*256 + 8'', mit anderer Klammerung ergibt sich ''(((5*256 + 6)*256 + 7)*256 + 8)'' oder auch ''84281096''.
Zureck zur IP geht es mit ganzzahliger Division und Restwertberechnung:
$ bc
84281096 % 256
8
84281096 / 256
329223
329223 % 256
7
329223 / 256
1286
1286 % 256
6
1286 / 256
5
Darum sollte es aber gar nicht gehen ;-) Dieses kleine Perl-Skript nimmt eine Liste von IP-Adresse vom Standard-Eingabekanal STDIN und gibt die Liste sortiert an STDOUT (Standardausgabekanal) aus:
#!/usr/bin/perl
use warnings;
use strict;
sub ip_vergleich {
my @ip1 = split /\./,$a ;
my @ip2 = split /\./,$b ;
my $i1 = (($ip1[0]*256 + $ip1[1])*256 + $ip1[2])*256 + $ip1[3];
my $i2 = (($ip2[0]*256 + $ip2[1])*256 + $ip2[2])*256 + $ip2[3];
return $i1 <=> $i2;
}
my @sorted = sort ip_vergleich ();
map { print } @sorted;
Fragen? Fragen!
[[adminstoriesartikel|Zurück zur Uebersicht]]