Reputation: 23
I have written a perl code for processing file 'Output.txt' which has below Content.
new.example.com 28
new.example.com 28
example.com 28
example.com 29
example.com 29
example.com 29
example.com 29
orginal.com 28
orginal.com 29
orginal.com 30
orginal.com 31
expand.com 31
And file 'domain.txt' has list of domain Names which i need to match against File 'Output.txt'
new.example.com
example.com
orginal.com
test.com
new.com
I could manage to write PERL code like this
#!/usr/bin/perl
use strict;
open(LOGFILE,"Output.txt") or die("Could not open log file.");
my $domain_name = 'domain.txt' ;
open(DOM, $domain_name);
my @r_contents = <LOGFILE>;
close(LOGFILE);
while(<DOM>) {
chomp;
my $line = $_;
my @lowercase = map { lc } @r_contents;
my @grepNames = grep /^$line/, @lowercase;
foreach (@grepNames) {
if ( grep /^$line/, @lowercase ) {
$domains{lc($_)}++ ; }
}
}
close(DOM) ;
foreach my $domain (sort keys %domains) {
my %seen ;
($Dname, $WeekNum) = split(/\s+/, $domain);
my @array1 = grep { ! $seen{ $_ }++ } $WeekNum;
push @array2, @array1;
my @array4 = "$domains{$domain} $domain" ;
push @matrix,@array4 ;
}
printf "%-10s %-25s %-25s\n", 'DoaminName', "Week $array2[0]" ,"Week $array2[1]","Week $array2[2]";
print " @matrix \n";
current Output looks like this.
DoaminName Week 28 week29 week30 week 31
2 new.example.com 35
1 example.com 28
4 example.com 29
1 orginal.com 28
1 orginal.com 29
1 orginal.com 30
1 orginal.com 31
But i trying re-write the perl code to print the output like this .Please help me to correct the code.
Domain/WeekNumber Week28 Week29 Week30 Week31
new.example.com 2 No No No
example.com 1 4 NO NO
orginal.com 1 1 1 1
Upvotes: 0
Views: 331
Reputation: 1220
This produces the desired output, only I also sorted the output.
If you have long website names, add tabs in the code as necessary.
#!/usr/bin/perl
use warnings;
use strict;
open my $fh, "<", "Output.txt" or die "could not open Output.txt\n";
my %data;
my %weeks;
while(<$fh>){
chomp;
$_=~ m/(.*?)\s++(\d++)/;
my $site=$1;
my $week=$2;
$weeks{$week}++;
$data{$site}{$week}++;
}
print "Domain/WeekNumber";
for my $week (sort {$a <=> $b} keys %weeks){
print"\tWeek$week";
}
print"\n";
for my $site(sort keys %data){
print"$site\t\t";
for my $week (sort {$a <=> $b} keys %weeks){
unless(defined $data{$site}{$week} ){
print"NO\t";
}else{
print $data{$site}{$week} ."\t";
}
}
print"\n";
}
close $fh;
Upvotes: 1