#! /usr/local/bin/perl # This program reads the witty worm interval files and produces a # cuttlefish configuration file. use Getopt::Std; use FindBin qw($Bin); use lib "$Bin/../lib"; #use Util; use strict; my ($exicutable) = ($0 =~ /([^\/]+)$/); my $usage = "usage:$0 [-h] witty-interval-file\n"; sub Help() { print STDERR $usage; print<) { s/=\d+//g; push @data, $_; s/\#.+//; my ($lat, $long, $freq, $country, $state, $city) = split /\s+/; if (defined $city) { $cty2long{$country}{$long} = 1; } } } sub SelectType { foreach my $country (keys %cty2long) { my @longs = sort {$a<=>$b} keys %{$cty2long{$country}}; my $length = $longs[$#longs] - $longs[0]; if ($length > 30) { print STDERR "spliting by state:$country length:$length\n"; $cty_by_state{$country} = 1; } } } sub ParseData { my $time; foreach my $data (@data) { if ($data =~ /#\s+(\d+)/) { $time = $1; } else { my ($lat, $long, $freq, $country, $state, $city) = split /\s+/, $data; my $loc = $country; if (defined $cty_by_state{$country}) { $loc = "$country $state"; } my $lat_long = [$lat,$long]; $loc2freq{$time}{$loc} += $freq; push @{$loc2all_latlong{$loc}}, $lat_long; } } } sub SelectLatLong { foreach my $loc (keys %loc2all_latlong) { my @lat_long = sort {$a->[1]<=>$b->[1]} @{$loc2all_latlong{$loc}}; my $middle = sprintf("%d", $#lat_long/2); my ($lat, $long) = @{$lat_long[$middle]}; my $latlong = "$lat $long"; $loc2latlong{$loc} = $latlong; } } sub PrintData { foreach my $time (sort {$a<=>$b} keys %loc2freq) { print "# $time\n"; foreach my $loc (sort keys %{$loc2freq{$time}}) { my $freq = $loc2freq{$time}{$loc}; my $lat_long = $loc2latlong{$loc}; print "$lat_long $freq $loc\n"; } } }