Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Convert this shell script to PERL script. This is the shell script and I need it

ID: 3825772 • Letter: C

Question

Convert this shell script to PERL script. This is the shell script and I need it to be written as perl program

# Check to make sure the input file was passed as a parameter

if [ $# -ne 1 ]; then

   echo "usage: $0 <input-file-name>"

   exit 1

fi

# Compute the average of the parameters passed in

function computeAvgNum {

   avg=0

   # iterate over parameters, adding them together

   for val in "$@"

   do

      avg=$(echo "scale=2; $avg + $val" | bc)

   done

   # divide but the number of parameters

   avg=$(echo "scale=2; $avg / $#" | bc)

   echo "$avg"

}

echo "Performance Data"

# Iterate over our data file storing our values

while read code value; do

   # Output our content

   case "$code" in

      D) echo "Date                " $(echo $value | cut -f1 -d' ') ;;

      B) echo "Tamb (°C)           " $(computeAvgNum $value) ;;

      P) echo "Tref (°C)           " $(computeAvgNum $value) ;;

      Q) echo "Tm (°C)             " $(computeAvgNum $value) ;;

      R) echo "Irradiance (W/m^2) " $(computeAvgNum $value) ;;

      H) echo "Isc (A)             " $(computeAvgNum $value) ;;

      O) echo "Voc (V)             " $(computeAvgNum $value) ;;

      C) echo "Imp (A)             " $(computeAvgNum $value) ;;

      K) echo "Vmp (V)             " $(computeAvgNum $value) ;;

      W) echo "Pm (W)              " $(computeAvgNum $value) ;;

      L) echo "FF (%)              " $(computeAvgNum $value) ;;

   esac

done <$1

Explanation / Answer

perl code:

#!/usr/bin/perl
# script name is test.pl
use strict;
use warnings;

# Checking if number of arguments is 1
if(@ARGV != 1){
   print "usage: $0 <input-file-name> ";
   exit 1;
}

# subroutine to compute average
sub computeAvgNum{
   my $avg = 0;

   # iterate over parameters, adding them together
   foreach my $val(@_){
       $avg += $val;
   }
   $avg = $avg/@_;

   return $avg;
}

print "Performance Data ";

open(FH, "$ARGV[0]") or die "file $ARGV[0] cannot be opened: $!";
# Iterate over our data file storing our values
while(my $line=<FH>){
   my ($code, $value) = split(/s+/, $line);
   # output our content
   if($code eq 'D'){
       printf "Date   %-9d ", $value;
   }
   elsif($code eq 'B'){
       printf "Tamb (°C) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'P'){
       printf "Tref (°C) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'Q'){
       printf "Tm (°C) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'R'){
       printf "Irradiance (W/m^2) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'H'){
       printf "Isc (A) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'O'){
       printf "Voc (V) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'C'){
       printf "Imp (A) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'K'){
       printf "Vmp (V) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'W'){
       printf "Pm (W) %-9.2f ", computeAvgNum($value);
   }
   elsif($code eq 'L'){
       printf "FF (%%) %-9.2f ", computeAvgNum($value);
   }
}
close(FH);


output:

186590cb0725:Test bonkv$ cat testfile
D 100
B 200
P 300
Q 400
R 500
H 600
O 700
C 800
K 900
W 1000
L 1100
186590cb0725:Test bonkv$ ./test.pl testfile
Performance Data
Date   100
Tamb (°C) 200.00   
Tref (°C) 300.00   
Tm (°C) 400.00   
Irradiance (W/m^2) 500.00   
Isc (A) 600.00   
Voc (V) 700.00   
Imp (A) 800.00   
Vmp (V) 900.00   
Pm (W) 1000.00
FF (%) 1100.00
186590cb0725:Test bonkv$