#!/usr/athena/bin/perl

require "getopts.pl";

do Getopts('b:a,d');

$file="/afs/net/admin/hosts/hstath.txt";
@rem=(RTR,SAN,SIP,BACKBONE,DATADOMAIN,SCE8000,TEST,EXTERNAL,NOX,NOC,NLR,ESNET,
      WILG,Z);

print "Loading hostfile..\n";
open(IN,"<$file") && (@hosts=<IN>) && close(IN) || die "Cannot access networks\n";

print "Parsing data..\n";
if (defined $opt_b) {
    $opt_b=uc($opt_b);
    foreach $val (@rem) {
	$remove="$opt_b-$val|$remove";
    }
    chop($remove);

    @data=grep(/: $opt_b-/i,@hosts);
    @data2=grep(/-SW-|-REP-|-STUB|-RTR-|-DMS/,@data);
    @data3=grep(!/$remove/,@data2);
    
    foreach $line (@data3) {
	($rest,$rest,$rest,$rest,$machine,$rest)=split(/ /,$line);
	($data4[$#data4+1],$rest)=split(/,/,$machine);
	($rest,$trs[$#trs+1],$rest)=split(/-/,$machine);
    }

    @trs=uniq(@trs);
    foreach $line (@trs) {
	print "$opt_b-$line";
	if (defined $opt_d) {
	    print ":\n";
	    @data5=grep(/$opt_b-$line/,@data4);
	    foreach $host (sort { $a <=> $b } @data5) {
		print "    $host\n";
	    }
	} else {
	    print "\n";
	}
    }
} else {
    foreach $val (@rem) {
	$remove="-$val|$remove";
    }
    chop($remove);

    @data=grep(/: B24|: N|: W|: M|: OC|: E/i,@hosts);
    @data2=grep(/-SW-|-REP-|-STUB|-RTR-|-DMS/,@data);
    @data3=grep(!/$remove/,@data2);
    
    foreach $line (@data3) {
	($rest,$rest,$rest,$rest,$machine,$rest)=split(/ /,$line);
	($data4[$#data4+1],$rest)=split(/,/,$machine);
	@data6=split(/-/,$machine);
	$trs[$#trs+1]="$data6[0]-$data6[1]";
    }

    @trs=uniq(@trs);
    foreach $line (@trs) {
	print "$line";
	if (defined $opt_d) {
	    print ":\n";
	    @data5=grep(/$line/,@data4);
	    foreach $host (sort { $a <=> $b } @data5) {
		print "    $host\n";
	    }
	} else {
	    print "\n";
	}
    }
};


sub uniq {

    local (@array) = @_;
    local (%hash);

    @hash{@array}=();
    return sort keys %hash;
};
