Converting awk to perl


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Converting awk to perl
# 1  
Old 11-08-2019
Converting awk to perl

Hello. I'm currently teaching myself Perl and was trying to turn an awk code that I had written into Perl. I have gotten stuck on a particular part and a2p has not helped me at all. The task was to take a .csv file containing a name, assignment type, score and points possible and compute it into a weighted grade.
An example of the .csv file is:



Code:
Billy     Final           Final     82     100
Billy     Survey        WS       5       5
Bob     Homework   H01      19     100
Bob     Homework   H02      82     100
 Sam    Quiz            Q01      95     100

Here is the code that I have:


Code:
#!/usr/bin/perl
   
  open ($input, '<', $ARGV[0]);
   
  $header=<$input>;   
   
  $i =0;
   
  %data = ();
   
  @names;
   
  while ($line = <$input>)
  {
      
      chomp $line;
    
      @field = split "," , $line;
    
      $names[$i] = $field[0];
   
      push (@{$data{$names[$i]}}, ($field[3], $field[4]));
    
      $i = $i + 1;
  }
   
  close $input;
   
  printf("%-8s %8s \t %s \n", "Name", "Percent", "Letter");
   
  foreach $key ( sort keys %data )
  {
     
      @value = @{$data{$key}};
   
      $total = 0;
    
      $possible = 0;
    
      $percent = 0;
    
      $i = 0;
    
      foreach $val (@value)
      {
          if($i % 2 == 0)
          {
              $total += $val;
          }
          
          else
          {
              $possible += $val;
          }
       
              $i += 1;
      
      }
  

  foreach $_ (keys %names) {
      $Homework=($total[$_ . "Homework"] / $possible[$_ . "Homework"]) * 0.10;
      $Lab =($total[$_ . "Lab"] / $possible[$_ . "Lab"]) * .30;
      $Final = ($total[$_ . "Final"] / $possible[$_ . "Final"]) * .15;
      $Quiz = ($total[$_ . "Quiz"] / $possible[$_ . "Quiz"]) * .40;
      $Survery = ($total[$_ . "Survey"] / $possible[$_ . "Survey"]) * .05;
      $percent = ($Homework + $Lab + $Final + $Quiz + $Survery) * 100;
   
      printf "%s\t%.2f\t", $_, $percent;
      if ($percent >= 90 && $percent <= 100) {
      print 'A';
      }
      elsif ($percent >= 80 && $percent < 90) {
      print 'B';
      }
      elsif ($percent >= 70 && $percent < 80) {
      print 'C';
      }
      elsif ($percent >= 60 && $percent < 70) {
      print 'D';
      }
      else {
      print 'E';
      }
      printf("%-8s %8.2f \t %4s\n", $key, $percent, $grade);
  }
  }

I keep getting syntax errors on the follow part of the code:


Code:
foreach $_ (keys %names) {
      $Homework=($total[$_ . "Homework"] / $possible[$_ . "Homework"]) * 0.10;
      $Lab =($total[$_ . "Lab"] / $possible[$_ .[$_ . "Lab"]) * .30;
      $Final = ($total[$_ . "Final"] / $possible[$_ . "Final"]) * .15;
      $Quiz = ($total[$_ . "Quiz"] / $possible[$_ . "Quiz"]) * .40;
      $Survery = ($total[$_ . "Survey"] / $possible[$_ . "Survey"]) * .05;
      $percent = ($Homework + $Lab + $Final + $Quiz + $Survery) * 100;


The only output I am getting is Name Percent Letter and none of the data from the csv file. Any tips?

Last edited by Scrutinizer; 11-09-2019 at 03:48 AM.. Reason: Quote tags -> code tags
This User Gave Thanks to Eric7giants For This Post:
# 2  
Old 11-08-2019
Dear Eric7giants,

Thanks for posting these programming challenges.

Cross language coding and lateral thinking is really important to increase cognitive skills and technical abilities.
This User Gave Thanks to Neo For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Converting awk to perl

Hello. I'm trying to convert an awk script I wrote to perl (which I just started self-teaching). I tried the a2p command but I couldn't make sense of most of it. Here was the awk code: BEGIN{ FS = "," print "NAME\tLOW\tHIGH\tAVERAGE" a=0 } { if(a==0){ a+=1 (1 Reply)
Discussion started by: Eric7giants
1 Replies

2. Shell Programming and Scripting

Converting shell to Perl I run into shell built in function trap and need alternative in Perl

I am working on converting shell to Perl script. In shell we have built in function trap Do you know alternative in Perl or actually we don't need it? Thanks for contribution (3 Replies)
Discussion started by: digioleg54
3 Replies

3. Shell Programming and Scripting

Simple perl help - converting numbers

Hi friends, I'm very new to perl and got some requirement. I've input numbers which has size of 17 characters like below: -22500.0000000000 58750.00000000000 4944.000000000000 -900.000000000000 272.0000000000000 I need to convert these numbers from negative to positive and positive... (4 Replies)
Discussion started by: ganapati
4 Replies

4. UNIX for Advanced & Expert Users

problem with converting time using perl

Hello, I have an AIX 5.3 system and i created a script to get the last login of users. The script goes like this: LAST_LOGIN=`lsuser -a time_last_login $cur_user` TIME_LOGIN=`perl -e 'print scalar localtime("$LAST_LOGIN")'` Actually what i do in these two lines is to set a variable... (2 Replies)
Discussion started by: omonoiatis9
2 Replies

5. Shell Programming and Scripting

PERL- converting exponent value to floating point

Hi Friends, I've an exponent value like, $val="9.57669e-05"; I want to convert this value to floating point value in PERL scripting. I tried googling for the solution, and also asked many perl friends. Unfortunately, I didn't get answer. Could you please help me? Thanks in advance... (4 Replies)
Discussion started by: ganapati
4 Replies

6. Shell Programming and Scripting

Converting perl to exe

Hello All, I want to convert .pl to .exe with all include libraries like: WIN32/OLE..... Please suggest me how i will proceed for this.... (7 Replies)
Discussion started by: suvenduperl
7 Replies

7. Shell Programming and Scripting

Converting string to date in perl

Hi, I need convert a date string to date. For eaxmple $last_date=6/2/2009 and I want to change the format of the above mentioned date to "Jun 2 2009 12:00AM". Do we have any functionality or staright method to convert to the desired format? (4 Replies)
Discussion started by: siba.s.nayak
4 Replies

8. Shell Programming and Scripting

Converting html to pdf perl

Hi All, I have a requirement of converting an html form into pdf using perl. The html form contains images, tables and css implementation. I tried using various perl modules but failed to achive the target. I succeeded in generating a pdf from the html file using... (2 Replies)
Discussion started by: DILEEP410
2 Replies

9. Shell Programming and Scripting

Converting Perl code to shell

I have a perl code that runs like Code I sub p { if ($d >= $D) {return} printf "%3s"x$d++," "; printf "%s%s\n",$_,$h{$_}?" ** ":""; if (!$h{$_}) { $h{$_}=1; map {p($_)} @{$s{$_}} } $d-- } ($Set,$Job,$Num,$D) = (@ARGV); map {shift} 0..3; (8 Replies)
Discussion started by: zainravi
8 Replies

10. UNIX for Dummies Questions & Answers

Converting bash shell to perl

Does anyone know how to convert this bash shell script to perl? for i in `ls -l *pgp` do `usr/bin/gpg --passphrase-fd 0 $i < .sunspot` done Thanks! Any help would be appreciated. I'm new to Linux and perl. (4 Replies)
Discussion started by: freak
4 Replies
Login or Register to Ask a Question