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$