Analyze Output Trace File Using Perl

Here is my script for analyze output trace file in NS-2 using Perl. This script is modified from Elmurod website

#!/usr/bin/perl
$tracefile=$ARGV[0];
$granularity=$ARGV[1];



#ouput file. You should change this line according to your output file folder...Abdusy modified
$ofile="/home/abdusy/Documents/aodv-simulation/ref-abdusy/simulasi-aodv/results/simulation_result.csv";
open OUT, ">$ofile" or die "$0 cannot open output file $ofile: $!";

#my @pausetime = (10,50,100,200,400,600);
open (DR,STDIN);
$gclock=0;

#Init Data Packet Information
$dataSent = 0;
$dataRecv = 0;
$routerDrop = 0;
$aodvDataSent = 0;

#Init Routing Overhead & End-to-End Delay .............................Abdusy Added
$routingOverHead = 0;
$e2eDelay = 0 ;

#Init for counting end-to-end delay.............................Abdusy Added
$timesent = 0;
$timereceived = 0;
$timeav = 0;
$timeall = 0;
$idsent = 0;
$time = 0;

#Data Packet from Ad hoc-Host .............................Abdusy Added
$dataA2H = 0;
$dataH2A = 0;

#AODV Message Packet Information
$aodvSent = 0;
$aodvRecv = 0;

$aodvSentRequest = 0;
$aodvRecvRequest = 0;
$aodvDropRequest = 0;

$aodvSentReply = 0;
$aodvRecvReply = 0;
$aodvDropReply = 0;

$routerDropRequest = 0;
$routerDropReply = 0;

#loop...........................................for read trace file : Abdusy modified
foreach $pausetime (@pausetime) {

if ($granularity==0) {$granularity=30;}

while(<>){
#while ($line) [
chomp;
#chomp $line;

#To split text in line .......................................Abdusy modified
($status, $t, $time, $data) = split ("t");
if (/^s/){
if (/^s.*AODV/) {
$aodvSent++;
if (/^s.*REQUEST/) {
$aodvSendRequest++;
}
elsif (/^s.*REPLY/) {
$aodvSendReply++;
}
#elsif (/^s.*AGT/) {
#	$aodvDataSent++;
#}
}
#elsif (/^s.*cbr/) {
elsif (/^s.*AGT/ && /^s.*8388609/ && /^s.*4194305*/ && /^s.*cbr/) {
#elsif (/^s.*AGT/ && /^s.*4194305/ && /^s.*8388609*/ && /^s.*cbr/) {
#elsif (/^s.*AGT/ && /^s.*cbr/) {
$dataSent++;
}

}
#condition for counting routing over head....................Abdusy Added
elsif (/^f.*RTR/) {
$routingOverHead++;

}

elsif (/^r/){
if (/^r.*AODV/) {
$aodvRecv++;
if (/^r.*REQUEST/) {
$aodvRecvRequest++;
}
elsif (/^r.*REPLY/) {
$aodvRecvReply++;
}
}
# For old Trace Format ------------------------------ ABDUSY : Modified
#elsif (/^r.*AGT/ && /^r.*cbr/) {
# For new Trace Format
elsif (/^r.*0 1.*cbr/) {
$dataRecv++;
if (($spl[46] eq $idsent)) {
$received++;
}
}
#print OUT "$pausetime t "."$aodvSent t"."$aodvRecv t". (($aodvSent != 0)?$aodvRecv /$aodvSent: 0)*100 ."n";

} elsif (/^D/) {
if (/^D.*AODV/) {
if (/^D.*REQUEST/) {
$aodvDropRequest++;
}
elsif (/^D.*REPLY/) {
$aodvDropReply++;
}

}
if (/^D.*RTR/) {
$routerDrop++;
}

}
#.............................Abdusy

}
# end if
}
# end for

close DR;

#Calculate packet delivery ratio
$delivery_ratio = (100*$dataRecv/$dataSent)		;

#Calculate routing over head = sum of aodv message x besar paket yaitu 48 byte dibagi waktu simulasi........Abdusy Added
$routingOverHead = (($routingOverHead + $aodvSent + $aodvRecv )* 48)/600;

#Calculate end-to-end delay .................................................Abdusy Added
#$timeav=$timesent/$dataRecv;

print " n";
print " ##############################n";
print " #  *** ANALYZE & RESULT ***  #n";
print " ##############################n";
print " n";
print "AODV Sent		: $aodvSent packets n";
print "   AODV Sent Request	: $aodvSentRequestn";
print "   AODV Sent Reply	: $aodvSentReplyn";
print "------------------------------------n";
print "AODV Recv		: $aodvRecv packetsn";
print "   AODV Recv Request	: $aodvRecvRequestn";
print "   AODV Recv Reply	: $aodvRecvReplyn";
print "------------------------------------n";
print "Data Sent		: $dataSent packetsn";
print "Data Recv		: $dataRecv packetsn";
print "------------------------------------n";
print "Router Drop		: $routerDrop packetsn";
print "------------------------------------n";
print "Packet Delivery Ratio	: $delivery_ratio % n";
print "Routing Over Head	: $routingOverHead bytes per second n";
print " n";
print " n";

close OUT;

###############################################################################
# This script is modified from analyze.pl from Elmurod.net
# to use this script, you have to copy to /usr/bin
# and do "chmod 777 /usr/bin/analyze.pl"
# To analyze trace file just run "cat trace-file.tr | analyze.pl"
###############################################################################l
Advertisements

Tags: , , , ,

3 Responses to “Analyze Output Trace File Using Perl”

  1. rohit pal Says:

    linux@linux:~$ cd bin
    linux@linux:~/bin$ cat trace-file.tr / analyze.pl
    cat: trace-file.tr: No such file or directory
    cat: /: Is a directory
    #!/usr/bin/perl
    $tracefile=$ARGV[0];
    $granularity=$ARGV[1];

    $ofile=”simulation_result.csv”;
    open OUT, “>$ofile” or die “$0 cannot open output file $ofile: $!”;

    open (DR,STDIN);
    $gclock=0;

    #Data Packet Information
    $dataSent = 0;
    $dataRecv = 0;
    $routerDrop = 0;

    #AODV Packet Information
    $aodvSent = 0;
    $aodvRecv = 0;

    $aodvSentRequest = 0;
    $aodvRecvRequest = 0;
    $aodvDropRequest = 0;

    $aodvSentReply = 0;
    $aodvRecvReply = 0;
    $aodvDropReply = 0;

    if ($granularity==0) {$granularity=30;}

    while(){
    chomp;
    if (/^s/){
    if (/^s.*AODV/) {
    $aodvSent++;
    if (/^s.*REQUEST/) {
    $aodvSendRequest++;
    }
    elsif (/^s.*REPLY/) {
    $aodvSendReply++;
    }
    }
    elsif (/^s.*AGT/) {
    $dataSent++;
    }

    } elsif (/^r/){
    if (/^r.*AODV/) {
    $aodvRecv++;
    if (/^r.*REQUEST/) {
    $aodvRecvRequest++;
    }
    elsif (/^r.*REPLY/) {
    $aodvRecvReply++;
    }

    }
    elsif (/^r.*AGT/) {
    $dataRecv++;
    }

    } elsif (/^D/) {
    if (/^D.*AODV/) {
    if (/^D.*REQUEST/) {
    $aodvDropRequest++;
    }
    elsif (/^D.*REPLY/) {
    $aodvDropReply++;
    }

    }
    if (/^D.*RTR/) {
    $routerDrop++;
    }
    }

    }

    close DR;

    $delivery_ratio = 100*$dataRecv/$dataSent;

    print “AODV Sent : $aodvSent\n”;
    print “AODV Recv : $aodvRecv\n”;
    print “Data Sent : $dataSent\n”;
    print “Data Recv : $dataRecv\n”;
    print “Router Drop : $routerDrop\n”;
    print “Delivery Ratio : $delivery_ratio \n”;

    print OUT “Messages Sent,$dataSent\n”;
    print OUT “Messages Recieved,$dataRecv\n”;
    print OUT “Messages Dropped,$routerDrop\n”;
    print OUT “Delivery Rate,$delivery_ratio\n”;

    close OUT;

    linux@linux:~/bin$ chnod 777
    No command ‘chnod’ found, did you mean:
    Command ‘chmod’ from package ‘coreutils’ (main)
    chnod: command not found
    linux@linux:~/bin$ ns wireless.tcl
    num_nodes is set 20
    INITIALIZE THE LIST xListHead
    Loading connection pattern…
    couldn’t read file “cbr-20-10-1”: no such file or directory
    while executing
    “source.orig cbr-20-10-1”
    (“uplevel” body line 1)
    invoked from within
    “uplevel source.orig [list $fileName]”
    invoked from within
    “if [$instance_ is_http_url $fileName] {
    set buffer [$instance_ read_url $fileName]
    uplevel eval $buffer
    } else {
    uplevel source.orig [list $fileName]
    …”
    (procedure “source” line 8)
    invoked from within
    “source $val(cp)”
    (file “wireless.tcl” line 95)
    linux@linux:~/bin$ cat wireless1-out.tr / analyze.pl
    cat: /: Is a directory
    #!/usr/bin/perl
    $tracefile=$ARGV[0];
    $granularity=$ARGV[1];

    $ofile=”simulation_result.csv”;
    open OUT, “>$ofile” or die “$0 cannot open output file $ofile: $!”;

    open (DR,STDIN);
    $gclock=0;

    #Data Packet Information
    $dataSent = 0;
    $dataRecv = 0;
    $routerDrop = 0;

    #AODV Packet Information
    $aodvSent = 0;
    $aodvRecv = 0;

    $aodvSentRequest = 0;
    $aodvRecvRequest = 0;
    $aodvDropRequest = 0;

    $aodvSentReply = 0;
    $aodvRecvReply = 0;
    $aodvDropReply = 0;

    if ($granularity==0) {$granularity=30;}

    while(){
    chomp;
    if (/^s/){
    if (/^s.*AODV/) {
    $aodvSent++;
    if (/^s.*REQUEST/) {
    $aodvSendRequest++;
    }
    elsif (/^s.*REPLY/) {
    $aodvSendReply++;
    }
    }
    elsif (/^s.*AGT/) {
    $dataSent++;
    }

    } elsif (/^r/){
    if (/^r.*AODV/) {
    $aodvRecv++;
    if (/^r.*REQUEST/) {
    $aodvRecvRequest++;
    }
    elsif (/^r.*REPLY/) {
    $aodvRecvReply++;
    }

    }
    elsif (/^r.*AGT/) {
    $dataRecv++;
    }

    } elsif (/^D/) {
    if (/^D.*AODV/) {
    if (/^D.*REQUEST/) {
    $aodvDropRequest++;
    }
    elsif (/^D.*REPLY/) {
    $aodvDropReply++;
    }

    }
    if (/^D.*RTR/) {
    $routerDrop++;
    }
    }

    }

    close DR;

    $delivery_ratio = 100*$dataRecv/$dataSent;

    print “AODV Sent : $aodvSent\n”;
    print “AODV Recv : $aodvRecv\n”;
    print “Data Sent : $dataSent\n”;
    print “Data Recv : $dataRecv\n”;
    print “Router Drop : $routerDrop\n”;
    print “Delivery Ratio : $delivery_ratio \n”;

    print OUT “Messages Sent,$dataSent\n”;
    print OUT “Messages Recieved,$dataRecv\n”;
    print OUT “Messages Dropped,$routerDrop\n”;
    print OUT “Delivery Rate,$delivery_ratio\n”;

    close OUT;

    linux@linux:~/bin$ cat wireless1-out.tr / throughput.pl
    cat: /: Is a directory
    # type: perl throughput.pl > output file

    $infile=$ARGV[0];
    $tonode=$ARGV[1];
    $granularity=$ARGV[2];

    #we compute how many bytes were transmitted during time interval specified
    #by granularity parameter in seconds
    $sum=0;
    $clock=0;

    open (DATA,”<$infile")
    || die "Can't open $infile $!";

    while () {
    @x = split(‘ ‘);

    #column 1 is time
    if ($x[1]-$clock <= $granularity)
    {
    #checking if the event corresponds to a reception
    if ($x[0] eq 'r')
    {
    #checking if the destination corresponds to arg 1
    if ($x[3] eq $tonode)
    {
    #checking if the packet type is TCP
    if ($x[4] eq 'tcp')
    {
    $sum=$sum+$x[5];
    }
    }
    }
    }
    else
    { $throughput=$sum/$granularity;
    print STDOUT "$x[1] $throughput\n";
    $clock=$clock+$granularity;
    $sum=0;
    }
    }
    $throughput=$sum/$granularity;
    print STDOUT "$x[1] $throughput\n";
    $clock=$clock+$granularity;
    $sum=0;

    close DATA;
    exit(0);

    I have above result kindly suggest me what to do

    Like

  2. Abinaya Rajendhiran Says:

    hi am new to perl script!! can yo plz help me to how to run the above given script???

    Like

  3. Struktur Dasar PHP Says:

    Everything is very open with a really clear explanation of the issues.
    It was definitely informative. Your site is useful.
    Many thanks for sharing!

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: